Lemonade101 2020-03-19 15:51 采纳率: 0%
浏览 112

(已解决)【OpenGL C++】交错顶点数据设置无效

我自己定义的一个画圆的类:

class glCircle :public glObject

{

private:

VERTEX* p;
....
};

其中glObject定义如下:

class glObject

{

protected:

GLuint vbuffer;
GLuint ibuffer;
...

};

VERTEX是我自己定义的一个顶点结构体:
struct VERTEX

{

GLfloat pos[3];
GLfloat color[3];

};

目的就是在那个p数组里存顶点数据,然后再存进vbuffer,ibuffer进行绘制。算是对opengl的渲染机制打了个包。

我的渲染函数glCircle::Draw()定义如下:

glBindVertexArray(vao[0]);  //2D顶点属性
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, false, sizeof(VERTEX),0);
glVertexAttribPointer(1, 3, GL_FLOAT, false, sizeof(VERTEX),(void*)12);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glDrawArrays(GL_TRIANGLE_FAN, 0, pnum);

顶点着色器如下:

#version 450 core
#pragma debug(on)

layout(location=0)  in vec3 vertex;
layout(location=1)  in vec3 pcolor;

out vec4 color;

uniform Matrix{
mat4 world;
mat4 view;
mat4 proj;
};

void main()
{
gl_Position=vec4(vertex.xy,0.0f,1.0f);
color=vec4(pcolor,1.0f);
}

像素着色器如下:

#version 450 core
#pragma debug(on)

in vec4 fcolor;

out vec4 color;

void main()
{
color=fcolor;
}

结果无论我的color设成什么那个圆都是黑色的:

图片说明

图片中大家还看到了一些直线和矩形的边角对不对?没错,所有的渲染对象全部是黑色的,无论color的值为何。
我可以肯定我的vbuffer,ibuffer创建成功且数据在渲染时用glMapBuffer拷进去了。问题在于这些数据没有按预期地传到着色器里......

初学OpenGL,求求各位大神帮帮忙~~

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 15:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题