2017-04-15 15 views
-3

私は現在Open GLを学んでいますが、始めようとするのは非常に難しいと感じています。私はOpenGLの経験はありませんが、Obj-CとSwiftの経験はほとんどありません。私は基本的なジオメトリを描きたいだけで、何も想像していません。XcodeでOpenGLの初心者ガイド

私は最初にNSOpenGLViewを使うことができると仮定しましたが、実際にこれを使い始める方法に関する参考資料はないようです。私は検索して検索しましたが、新人として、すべてのドキュメンテーションとチュートリアルは非常に扱いにくいです。非常に頻繁に古くなっています。

ビュー内のOpenGLビューの基本的な開始点が必要です私が始めることができるコントローラ。

+0

これはかなり広いです。問題のある具体的な例を示す必要があります。 – Carcigenicate

+0

その性質上、広い質問です。コメントのためにコメントのように思えます。役に立たないです – James

+0

あまりにも広い質問はofftopicですので、いいえ。あなたの質問は、絞り込んでおかないと閉鎖される可能性があります。 「どのように私はこのトピックにアプローチするのですか?」という質問は、ほとんどすべてが意見に基づいているため、サイトには適切ではありません。あなたがスタートして何か具体的な問題を抱えていたら、それはオントロジであろう。 – Carcigenicate

答えて

0

私が作成していたアクションゲームでOpenGLを習得しようとすると、数年前に同じ問題が発生しました。しかし、私がドキュメントやチュートリアルを深く掘り下げていくうちに、私はそれが思った以上に複雑であると結論づけました。ここで私が学んだ情報の一部さ:Xcodeの上のOpenGL ES、およびOpenGL ES

  1. OpenGLは同じではありませんであるAppleは、構文の一部を変更したので、Android上でも異なっています。

    • ES1(固定パイプライン):Xcodeの上

    • のOpenGL ESは、異なるバージョンのカップルを持っているシェーダプログラムを必要としません。それはよりシンプルですが、より少ないオプションがあります。

    • ES2/ES3(プログラマブルパイプライン):shaderを使用し、さらに多くのオプションがありますが、より複雑です。その後

PC上のOpenGLのチュートリアルでは、より詳細であり、多くのサンプルプロジェクトを見つけることができますので、私は、代替としてWindowsを使用してプラットフォームを変更しました。 Xcodeを使用する場合と比較して、基本ははるかに簡単に学習できます。 のような別のプラットフォームでのシェーダのプログラミングとシェーダのプログラミングの基本的な概念を学び、さらに経験を積んだ後にXcodeに戻ってくることをお勧めします。

Xcodeの使用を強くお勧めする場合は、エラーなしで正常にコンパイルできるサンプルコードを提供できます。次のコードはOpenGL ES1で書かれています。あなたがStoryboardsを使用している場合は、上の表示を変更することを忘れない

#import "ViewController.h" 

typedef struct { 

    GLKVector3 PositionCoordinates; 

}VertexData; 

#define SQUARE_SIZE 120.0f 

VertexData Vertices[] = { 

    {0.0f, 0.0f, 0.0f}, 
    {SQUARE_SIZE, 0.0f, 0.0f}, 
    {0.0f, SQUARE_SIZE, 0.0f}, 
    {0.0f, SQUARE_SIZE, 0.0f}, 
    {SQUARE_SIZE, 0.0f, 0.0f}, 
    {SQUARE_SIZE, SQUARE_SIZE, 0.0f} 
}; 

@interface ViewController() 

@property (nonatomic, strong) EAGLContext *Context; 
@property (nonatomic, strong) GLKBaseEffect *BaseEffect; 

@end 

@implementation ViewController { 

    GLuint _VertexBufferID; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.Context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

    GLKView *View = (GLKView *)self.view; 
    View.context = self.Context; 
    [EAGLContext setCurrentContext:self.Context]; 

    self.BaseEffect = [[GLKBaseEffect alloc] init]; 
    self.BaseEffect.useConstantColor = YES; 
    self.BaseEffect.constantColor = GLKVector4Make(255/255.0f, 255/255.0f, 255/255.0f, 1.0f); 

    self.BaseEffect.transform.projectionMatrix = GLKMatrix4MakeOrtho(0, self.view.bounds.size.width, 0, self.view.bounds.size.height, 0, 100); 

    glClearColor(0/255.0f, 0/255.0f, 0/255.0f, 1.0f); 

    glGenBuffers(1, &_VertexBufferID); 
    glBindBuffer(GL_ARRAY_BUFFER, _VertexBufferID); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(VertexData), NULL); 
} 

#pragma mark - GLKView delegate methods 

-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect { 

    glClear(GL_COLOR_BUFFER_BIT); 
    [self.BaseEffect prepareToDraw]; 
    glDrawArrays(GL_TRIANGLES, 0, 6); 
} 

-(void)Update { 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

:ちょうど新しいSingle View Applicationを作成し、次のコードを貼り付けます:

ViewController.h:

#import <UIKit/UIKit.h> 
#import <GLKit/GLKit.h> 

@interface ViewController : GLKViewController 

@end 

ViewController.mをViewControllerをGLKViewクラスに追加します(写真のように)。

Change view class into GLKView

コンパイルし、その後、BOOM!ジューシーな白い広場は熟しており、編集する準備ができています!

White square in GLKView

私は涙に私はこのコードで成功した最初の時間をバーストと思います。私はYoutubeのチュートリアルから学んだコードから修正しました。もし私が再び彼に会うと、その男に感謝しなければならない。これがあなたを助けてくれることを願っています:)

P.S.私は、2つの3Dキューブがお互いに回転している「OpenGL ES3 Template Project」のサンプルコードのコピーを持っていますが、それはずっと複雑です。

+0

これはちょうど私が必要としていることです、すべてのアドバイスとサンプルコードをありがとう! – James

+0

この回答が気に入ったら、これを受け入れたとマークすることができます:) – FireMango

関連する問題