-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)の動きでポイントを得ることが期待されますが、何もウィンドウに表示されません!
返信いただきありがとうございます。 まだ窓に何もありません! –
さて、使用している座標は?あなたはVSで変換を行わず、 'w 'を1にしておくので、[-1、1]である正規化されたデバイス空間を直接描画します。整数座標を使用するので、(0,0)の場合を除いて、ウィンドウ中心に終わるはずのものを見ることはほとんどありません。 – derhass
私はx、yをフロートに変更し、(0.4、0.7)のような値を試してみましたが、何も表示されません! –