私はOpenGLに関するいくつかのチュートリアルに従っており、問題が発生しています。 Mesh
というクラスを作成しました。このクラスはそのコンストラクタで頂点の配列をとり、頂点配列などを生成して描画を行います。問題は、私は何も見ていないということです。OpenGL:vertexArrayとglBegin()
class Mesh
{
public:
Mesh(Vertex * vertices, size_t numVertices);
virtual ~Mesh();
void Draw();
private:
enum { POSITION_VB, NUM_BUFFERS };
GLuint m_vertexArrayObject;
GLuint m_vertexArrayBuffers;
size_t m_drawCount;
};
、ここで実装
#include "mesh.h"
Mesh::Mesh(Vertex *vertices, size_t numVertices)
{
m_drawCount = numVertices;
glGenVertexArrays(1, &m_vertexArrayObject);
glBindVertexArray(m_vertexArrayObject);
glGenBuffers(NUM_BUFFERS, &m_vertexArrayBuffers);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexArrayBuffers);
glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof(vertices[0]), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindVertexArray(0);
}
void Mesh::Draw()
{
glBindVertexArray(m_vertexArrayObject);
glDrawArrays(GL_TRIANGLES, 0, m_drawCount);
glBindVertexArray(0);
}
Mesh::~Mesh()
{
glDeleteVertexArrays(1, &m_vertexArrayObject);
}
Vertex
I型Mesh::Draw()
class Vertex {
public:
Vertex(glm::vec3 const & pos) { this->pos = pos;}
private:
glm::vec3 pos;
};
ように見える単純なクラスですされています。ここではインターフェースがあります
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f, -0.25f, 0.0f); //triangle first vertex
glVertex3f(-0.5f, -0.25f, 0.0f); //triangle second vertex
glVertex3f(-0.75f, 0.25f, 0.0f); //triangle third vertex
glEnd(); //end drawing of triangles
画面に三角形が印刷されています。私の質問です:これは必ず、Mesh
のメンバー関数の実装にエラーがあることを意味しますか?もしそうなら誰でもそれを見つけることができますか?私は、glBegin
メソッドが、vertexarrayメソッドがバイパスできないコードのどこか別のエラーをバイパスするかもしれないと考えました。私はどんな助けにも感謝しています。また、必要に応じて追加コードを投稿することもできます。
シェーダコード:
#version 120
void main()
{
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}
シェイダーについてはどうですか? –
私はシェーダを別の場所に設定していますが、drawableであるglBeginの部分の色を決定するので正しく機能していることを確信しています – Slugger
@Slugger:*両方とも 'glVertexで使うことができる単一のシェーダを書くことは不可能です* 'コマンドと' glVertexAttribPointer'コマンドです。少なくとも、NVIDIAの非標準的な動作に頼るのではありません。だから私はあなたのシェイダーを見たいと思います。 –