ラベル OpenGL の投稿を表示しています。 すべての投稿を表示
ラベル OpenGL の投稿を表示しています。 すべての投稿を表示

2019年2月20日水曜日

SwiftでGLを動かす


開発環境
Xcode 10.1


プロジェクトの作成 

iOS, Single View App を作成する



プロジェクトのオプション

Swiftで作成



Viewクラスを変更


Main.storyboardのViewのCustom Classを「GLKView」に変更する。



ソースコードの変更


ViewController.swiftのコードを以下に変更する。

////////////////////////////////////// ここから 
//
//  ViewController.swift
//  GLSimple

import GLKit

import OpenGLES

class ViewController: GLKViewController {


    var context: EAGLContext? = nil

    
    deinit {
        self.tearDownGL()
        if EAGLContext.current() === self.context {
            EAGLContext.setCurrent(nil)
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.        
        self.context = EAGLContext(api: .openGLES2)
        if !(self.context != nil) {
            print("Failed to create ES context")
        }
        
        let view = self.view as! GLKView
        view.context = self.context!
        view.drawableDepthFormat = .format24
        
        self.setupGL()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
        if self.isViewLoaded && (self.view.window != nil) {
            self.view = nil
            self.tearDownGL()
            
            if EAGLContext.current() === self.context {
                EAGLContext.setCurrent(nil)
            }
            self.context = nil
        }
    }
    func setupGL() {
        EAGLContext.setCurrent(self.context)
        // TODO
    }
    
    func tearDownGL() {
        EAGLContext.setCurrent(self.context)
        // TODO
    }
    
    // MARK: - GLKView and GLKViewController delegate methods
    func update() {
    }
    
    override func glkView(_ view: GLKView, drawIn rect: CGRect) {
        glClearColor(0.65, 0.65, 0.65, 1.0)
        glClear(GLbitfield(GL_COLOR_BUFFER_BIT))
        
        // Render the object with GLKit
        glEnable(GLenum(GL_SCISSOR_TEST))
        glScissor(GLsizei(view.drawableWidth/4), GLsizei(view.drawableHeight/4),
GLsizei(view.drawableWidth/2), GLsizei(view.drawableHeight/2))
        glClearColor(0.65, 0.0, 0.65, 1.0)
        glClear(GLbitfield(GL_COLOR_BUFFER_BIT))
        glDisable(GLenum(GL_SCISSOR_TEST))
    }
}
//////////////////////////////////////////////// ここまで


実行結果









2015年4月29日水曜日

OpenGLのFrustum変換グラフ

OpenGLのFrustumでの座標変換のグラフを、MacのGrapherで表示してみました。


Z=-nearが-1に, Z=-farが1に変換されるのですが、
Z>-nearの座標が、必ずしも-1より小さい値に変換されるのではないということです。
-1より小さいか、-(n+f)/(n-f)より大きい値、に変換されます。
Z<-far の座標は、1〜-(n+f)/(n-f)に変換されます。

2014年11月22日土曜日

Mac Yosemite + Java7 + NetBeansでOpenGL(JOGL)

前回の投稿では、NetBeans8.0.1 + JOGLプラグインで、プロジェクトが実行できなかったのですが、JOGLの最新版をリンクすれば動くことが確認できました。


JOGLの最新版は、以下のサイトからダウンロードできます。
    http://jogamp.org/deployment/jogamp-current/archive/
ここから、以下のファイルをダウンロードします。
    jogamp-all-platforms.7z 10-Oct-2014 17:51 51M
これを解凍して、./jar フォルダに含まれる以下のファイルがMacのライブラリらしいです。
   gluegen-rt-natives-macosx-universal.jar
   gluegen-rt.jar
   jogl-all-natives-macosx-universal.jar
   jogl-all.jar
これらを、プロジェクトのライブラリに追加すれば、OpenGLのプログラムが動くようになりました。

但し、JOGLプラグインのサンプルは、上の設定を行っても、そのままでは動きませんでした。
例えばサンプルの「GearsDemo.zip」では、JOGLGearsDemo.java を以下のように変更すると動きました。

GL関連のインポートを以下に変更する。
    import javax.media.opengl.*;
    import javax.media.opengl.awt.GLCanvas;
    import javax.media.opengl.awt.GLJPanel;
    import com.jogamp.opengl.util.Animator;

GLCanvasの初期化を以下に変更する。
    GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2));
    GLCanvas canvas = new GLCanvas(caps);



GL gl = drawable.getGL();
の箇所を、以下に変更する。
GL2 gl = (GL2)drawable.getGL();

「GL.〜」を「GL2.〜」に変更する。






2014年10月19日日曜日

Mac、XcodeでGLFWをビルド

MacでGLFWをビルドしてみました。以下、その手順です。

http://www.glfw.org/download.html
上のGLFWダウンロードサイトより
glfw-3.0.4.zip
をダウンロードして解凍します。

CMake.appを起動し、
Where is the sourece code: に解凍フォルダを指定し、
Where to build the binaries: に適当な出力フォルダを指定します。
「Configure」ボタンを押します。
Specify the generator for this project で「Xcode」を選択して「Done」を押します。


Worningが出ますが無視して、
「Generae」ボタンを押して生成します。

出力フォルダにGLFW.xcodeprjが出力されます。

生成されたプロジェクトファイルをXcodeで開いて、ビルド&実行します。

Windowsでも同じようにビルドできました。
以下、WindowsでVisualStudio C++ 2010でビルドした時のスクリーンショットです。