如何在OpenGL / C ++中绘制多维数据集?

安德鲁·韦莱斯(Andrew Velez)

我看到很多人使用Glbegin(GL_POLYGON)绘制多维数据集,这是我在课堂上学到的,差异是老师认为我更糟的方式。

GLfloat verts[] =
{
    -1.0f, +1.0f, +1.0f, // 0
    +1.0f, +0.0f, +0.0f, // Color
    +1.0f, +1.0f, +1.0f, // 1
    +0.0f, +1.0f, +0.0f, // Color
    +1.0f, +1.0f, -1.0f, // 2
    +0.0f, +0.0f, +1.0f, // Color
    -1.0f, +1.0f, -1.0f, // 3
    +1.0f, +1.0f, +1.0f, // Color

    -1.0f, +1.0f, -1.0f, // 4
    +1.0f, +0.0f, +1.0f, // Color
    +1.0f, +1.0f, -1.0f, // 5
    +0.0f, +0.5f, +0.2f, // Color
    +1.0f, -1.0f, -1.0f, // 6
    +0.8f, +0.6f, +0.4f, // Color
    -1.0f, -1.0f, -1.0f, // 7
    +0.3f, +1.0f, +0.5f, // Color

    +1.0f, +1.0f, -1.0f, // 8
    +0.2f, +0.5f, +0.2f, // Color
    +1.0f, +1.0f, +1.0f, // 9
    +0.9f, +0.3f, +0.7f, // Color
    +1.0f, -1.0f, +1.0f, // 10
    +0.3f, +0.7f, +0.5f, // Color
    +1.0f, -1.0f, -1.0f, // 11
    +0.5f, +0.7f, +0.5f, // Color

    -1.0f, +1.0f, +1.0f, // 12
    +0.7f, +0.8f, +0.2f, // Color
    -1.0f, +1.0f, -1.0f, // 13
    +0.5f, +0.7f, +0.3f, // Color
    -1.0f, -1.0f, -1.0f, // 14
    +0.4f, +0.7f, +0.7f, // Color
    -1.0f, -1.0f, +1.0f, // 15
    +0.2f, +0.5f, +1.0f, // Color

    +1.0f, +1.0f, +1.0f, // 16
    +0.6f, +1.0f, +0.7f, // Color
    -1.0f, +1.0f, +1.0f, // 17
    +0.6f, +0.4f, +0.8f, // Color
    -1.0f, -1.0f, +1.0f, // 18
    +0.2f, +0.8f, +0.7f, // Color
    +1.0f, -1.0f, +1.0f, // 19
    +0.2f, +0.7f, +1.0f, // Color

    +1.0f, -1.0f, -1.0f, // 20
    +0.8f, +0.3f, +0.7f, // Color
    -1.0f, -1.0f, -1.0f, // 21
    +0.8f, +0.9f, +0.5f, // Color
    -1.0f, -1.0f, +1.0f, // 22
    +0.5f, +0.8f, +0.5f, // Color
    +1.0f, -1.0f, +1.0f, // 23
    +0.9f, +1.0f, +0.2f, // Color
};

GLushort indices[] = {
    0, 1, 2, 0, 2, 3, // Top
    4, 5, 6, 4, 6, 7, // Front
    8, 9, 10, 8, 10, 11, // Right 
    12, 13, 14, 12, 14, 15, // Left
    16, 17, 18, 16, 18, 19, // Back
    20, 22, 21, 20, 23, 22, // Bottom
};


GLuint VertexBufferID;
glGenBuffers(1, &VertexBufferID);
glBindBuffer(GL_ARRAY_BUFFER, VertexBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 6, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (char*)(sizeof(float) * 3));

//GLushort indices[] = { 0, 1, 2, 3, 1, 2, 0, 1, 2, 3, 1, 2 };
GLuint indexBufferID;
glGenBuffers(1, &indexBufferID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

所以我试图用它来画一个立方体,但它看起来像一个正方形,当我旋转它不是一个立方体。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, width(), height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); 

GLint TriPositionUniformLocation = glGetUniformLocation(programID, "TriPosition");
GLint domColorUniformLocation = glGetUniformLocation(programID, "domColor");

vec3 domColor(1.0f, 0.0f, 0.0f);

glUniformMatrix4fv(TriPositionUniformLocation, 1, GL_FALSE, &TriPosition[0][0]);
glUniform3fv(domColorUniformLocation, 1, &domColor[0]);

glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);

为什么没有立方体被绘制到屏幕上?我缺少什么方法或我做错了什么?

mat4 moveObject(mat4 mat, int left, int up, int right, int down, float                 speed, float angle,float dt)
{
short Left = GetAsyncKeyState(left);
short Up = GetAsyncKeyState(up);
short Right = GetAsyncKeyState(right);
short Down = GetAsyncKeyState(down);

mat4 matTemp = mat;

if (Left != 0)
{
    matTemp = rotate(matTemp, angle, vec3(1.0f, 1.0f, 1.0f));
}

if (Right != 0)
{
    matTemp = rotate(matTemp, -angle, vec3(0.0f, 0.0f, 1.0f));
}
if (Up != 0)
{
    matTemp = translate(matTemp, vec3(0.0f, 0.0f, speed)* dt);
}
if (Down != 0)
{
    matTemp = translate(matTemp, vec3(0.0f, -speed, 0.0f)* dt);
}

return matTemp;

}

这就是我设置triPosition的方式,我将返回的值设置为等于该值。

#version 430

in layout(location=0) vec3 position;
in layout(location=1) vec3 vertexColor;

uniform mat4 TriPosition;
uniform vec3 domColor;

out vec3 theColor;

void main()
{
    vec4 v = vec4(position, 1.0);
    gl_Position = TriPosition * v;
    theColor = vertexColor;
};

我现在的问题是,我看到了立方体,但是我无法在3d空间中移动它,它可能真的很靠近我的相机,但是即使按下也无法移动它。

萨格马克

您错误地指定了在调用glVertexAttribPointer时,顶点坐标只有2个分量(即2维)。因此,您得到的是正方形而不是立方体。

第二个参数应为3:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, 0);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ OpenGL,GLFW绘制简单的多维数据集

来自分类Dev

Java OpenGL多维数据集未绘制

来自分类Dev

OpenGL ES 2.0中的多维数据集不绘制给定的纹理

来自分类Dev

在Android上的OpenGL ES 3.0中未绘制多维数据集

来自分类Dev

如何在OpenGL中渲染具有不同颜色边的多维数据集?

来自分类Dev

OpenGL中的多维数据集映射

来自分类Dev

多维数据集未在OpenGL中渲染

来自分类Dev

如何在C ++中的OpenGL中在矩形上显示文本?

来自分类Dev

如何在C ++构建器中渲染openGL框架?

来自分类Dev

如何在 Dev C++ 中设置 Opengl?

来自分类Dev

如何在openGL c ++中的同一窗口中绘制两个对象?

来自分类Dev

如何在 OpenGL C++ 中绘制多个三角形?

来自分类Dev

如何在Python中获得多维数据集根

来自分类Dev

如何在Haskell中建模OLAP超多维数据集

来自分类Dev

如何在MATLAB中在较大的多维数据集中找到较小的多维数据集?

来自分类Dev

如何在MATLAB中在较大的多维数据集中找到较小的多维数据集?

来自分类Dev

如何在OpenGL中绘制视锥

来自分类Dev

无法获得旋转多维数据集以在OpenGL中渲染

来自分类Dev

无法获得旋转多维数据集以在OpenGL中渲染

来自分类Dev

C ++ OpenGL纹理多维数据集缺少三角形

来自分类Dev

如何在R中绘制地理参考数据集?

来自分类Dev

如何从MatPlotLib(NumPy)中的多维数据绘制轮廓?

来自分类Dev

如何在C#GUI中嵌入C OpenGL应用程序?

来自分类Dev

如何在C中反转多维数组?

来自分类Dev

如何在C中打印多维数组?

来自分类Dev

如何在C中反转多维数组?

来自分类Dev

如何从数据酿酒多维数据集中的多个存储中创建OLAP多维数据集

来自分类Dev

如何在matlab中绘制多维数组?

来自分类Dev

如何在C ++中的OS X Mavericks中设置OpenGL 4.1渲染上下文?

Related 相关文章

  1. 1

    C ++ OpenGL,GLFW绘制简单的多维数据集

  2. 2

    Java OpenGL多维数据集未绘制

  3. 3

    OpenGL ES 2.0中的多维数据集不绘制给定的纹理

  4. 4

    在Android上的OpenGL ES 3.0中未绘制多维数据集

  5. 5

    如何在OpenGL中渲染具有不同颜色边的多维数据集?

  6. 6

    OpenGL中的多维数据集映射

  7. 7

    多维数据集未在OpenGL中渲染

  8. 8

    如何在C ++中的OpenGL中在矩形上显示文本?

  9. 9

    如何在C ++构建器中渲染openGL框架?

  10. 10

    如何在 Dev C++ 中设置 Opengl?

  11. 11

    如何在openGL c ++中的同一窗口中绘制两个对象?

  12. 12

    如何在 OpenGL C++ 中绘制多个三角形?

  13. 13

    如何在Python中获得多维数据集根

  14. 14

    如何在Haskell中建模OLAP超多维数据集

  15. 15

    如何在MATLAB中在较大的多维数据集中找到较小的多维数据集?

  16. 16

    如何在MATLAB中在较大的多维数据集中找到较小的多维数据集?

  17. 17

    如何在OpenGL中绘制视锥

  18. 18

    无法获得旋转多维数据集以在OpenGL中渲染

  19. 19

    无法获得旋转多维数据集以在OpenGL中渲染

  20. 20

    C ++ OpenGL纹理多维数据集缺少三角形

  21. 21

    如何在R中绘制地理参考数据集?

  22. 22

    如何从MatPlotLib(NumPy)中的多维数据绘制轮廓?

  23. 23

    如何在C#GUI中嵌入C OpenGL应用程序?

  24. 24

    如何在C中反转多维数组?

  25. 25

    如何在C中打印多维数组?

  26. 26

    如何在C中反转多维数组?

  27. 27

    如何从数据酿酒多维数据集中的多个存储中创建OLAP多维数据集

  28. 28

    如何在matlab中绘制多维数组?

  29. 29

    如何在C ++中的OS X Mavericks中设置OpenGL 4.1渲染上下文?

热门标签

归档