2016-10-16 12 views
-2

私はそれぞれのx、yについて手を追跡しようとしていますが、私はOpenGLウィンドウ上に点を描画します。 "頂点シェーダファイル" シェーダ/ color.fragためOpenGL/SDLを使った描画点

#version 130 

in vec2 vertexPosition; 

void main() { 
    gl_Position.xy = vertexPosition; 
    gl_Position.z = 0; 
    gl_Position.w = 1.0; 
} 

: "フラグメントシェーダ"

#version 130 

out vec4 color ; 

void main() { 
    color = vec4(1.0, 1.0, 0.0, 1.0); 
} 
シェーダ/ color.vertについては

#include "GraphicsEffects.h" 
#include "Errors.h" 

GraphicsEffects::GraphicsEffects(): 
_vboID(0) 
{} 


void GraphicsEffects::init(){ 
SDL_Init(SDL_INIT_EVERYTHING); 
_window = SDL_CreateWindow("2D Painting", SDL_WINDOWPOS_CENTERED,  SDL_WINDOWPOS_CENTERED , 600, 600, SDL_WINDOW_OPENGL); 

if(_window == nullptr){ 
    fatalError("SDL window could not be created! "); } 


SDL_GLContext glContext = SDL_GL_CreateContext(_window); 
if(glContext == nullptr) { 
    fatalError("SDL_GL context could not be created!"); 
} 

GLenum error = glewInit(); 
if(error != GLEW_OK){ 
    fatalError("Could not initialize glew!"); 
} 

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 

if(_vboID == 0){ 
    glGenBuffers(1, &_vboID); 
} 

_colorProgram.compileShaders("Shaders/color.vert", "Shaders/color.frag"); 
_colorProgram.addAttribute("vertexPosition"); 
_colorProgram.linkShaders(); 

} 


void GraphicsEffects::draw(int x, int y){ 
int pointData[2]; 
pointData[0] = x; 
pointData[1] = y; 

glClearDepth(1.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

_colorProgram.use(); 

glBindBuffer(GL_ARRAY_BUFFER, _vboID); 

glBufferData(GL_ARRAY_BUFFER, sizeof(pointData), pointData, GL_STATIC_DRAW); 
glEnableVertexAttribArray(0); 
glVertexAttribPointer(0, 2, GL_INT, GL_FALSE, 0, 0); 

glDrawArrays(GL_POINT, 0, 1); 

glBindBuffer(GL_ARRAY_BUFFER, 0); 

_colorProgram.unuse(); 

SDL_GL_SwapWindow(_window); 


} 

:私のコードです

私は私の(x、y)の動きでポイントを得ることが期待されますが、何もウィンドウに表示されません!

答えて

0

このライン

glDrawArrays(GL_POINT, 0, 1); 

GL_INVALID_ENUMエラーを生成し、他に何もしません。正しい値はGL_POINTSであり、GL_POINTではありません。

開発ビルドでは、実際にエラーチェックを追加する必要があります。可能であれば、より新しいOpenGLバージョンのdebug output functionalityを見てください。

+0

返信いただきありがとうございます。 まだ窓に何もありません! –

+0

さて、使用している座標は?あなたはVSで変換を行わず、 'w 'を1にしておくので、[-1、1]である正規化されたデバイス空間を直接描画します。整数座標を使用するので、(0,0)の場合を除いて、ウィンドウ中心に終わるはずのものを見ることはほとんどありません。 – derhass

+0

私はx、yをフロートに変更し、(0.4、0.7)のような値を試してみましたが、何も表示されません! –

関連する問題