文档章节

OpenGL vertext shader 属性设置

y
 yizhangxyz
发布于 2016/06/28 10:33
字数 196
阅读 15
收藏 0

typedef struct _vertex{
    GLfloat  position[2];
    GLfloat  colors[4];
} Vertex; //定义顶点

GLfloat  positions[NumVertices][2] = {
        { -0.90, -0.90 },  // Triangle 1
        {  0.85, -0.90 },
        { -0.90,  0.85 },
        {  0.90, -0.85 },  // Triangle 2
        {  0.90,  0.90 },
        { -0.85,  0.90 }
    };
    
    GLfloat  colors[NumVertices][4] = {
        {  1.0, 0.0, 0.0, 1.0},  // Triangle 1
        {  1.0, 0.0, 0.0, 1.0},
        {  1.0, 0.0, 0.0, 1.0},
        {  1.0, 0.0, 0.0, 1.0},  // Triangle 2
        {  0.0, 1.0, 0.0, 1.0},
        {  0.0, 0.0, 1.0, 1.0}
    };
    
    Vertex vertexs[NumVertices];
    
    for(int i=0;i<NumVertices;i++){
        vertexs[i].position[0] = positions[i][0];
        vertexs[i].position[1] = positions[i][1];
        
        vertexs[i].colors[0] = colors[i][0];
        vertexs[i].colors[1] = colors[i][1];
        vertexs[i].colors[2] = colors[i][2];
        vertexs[i].colors[3] = colors[i][3];
    }
    
    glGenBuffers(NumBuffers, Buffers);
    glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
    
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexs),vertexs, GL_STATIC_DRAW);
    
    
    GLuint prog = Program::Load( vert, frag );
    glUseProgram( prog );
    
    glEnableVertexAttribArray( 0 );
    glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) offsetof(Vertex, position));

    
    // colors
    glEnableVertexAttribArray( 1 );
    glVertexAttribPointer( 1, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) offsetof(Vertex, colors));

这样,在vertex shader中就可以通过

attribute vec4 a_position;
attribute vec4 a_color;

来接收属性了。

 

© 著作权归作者所有

共有 人打赏支持
上一篇: VAO和VBO
下一篇: OpenGL shader使用
y
粉丝 2
博文 67
码字总数 42366
作品 0
成都
私信 提问
Xcode 调试OpenGL shader 步骤详解

iOS Xcode 调试OpenGL shader 步骤详解 注意Apple的官方文档详细的描述了要使用GPU Frame Capture功能,必须使用EAGLContext作为上下文,而且要使用CAEAGLLayer或者GLKView,同时还要保证使用...

HeroHY
2018/10/03
0
0
多平台游戏渲染开发

多平台游戏渲染开发 跨平台移动应用开发的渲染解决方案综述 在移动设备上做应用/游戏开发,实现跨平台是主流。对于应用/游戏的逻辑功能和核心算法部分,如果是用C++进行开发的,因为iOS/And...

失足处男的倒霉孩子
2013/12/25
1K
0
Android平台Camera实时滤镜实现方法探讨(五)--GLSurfaceView实现Camera预览

前面有一篇探讨了如何在片段着色器中将YUV数据转换为RGB数据并显示,但采用samplerExternalOES将SurfaceTexture作为OpenGL外部纹理,需要使用GLTEXTUREEXTERNAL_OES作为纹理模板,通过SetPr...

程序员扛把子
2015/12/04
0
0
iOS下 WebRTC 视频渲染

前言 今天为大家介绍一下 iOS 下 WebRTC是如何渲染视频的。在iOS中有两种加速渲染视频的方法。一种是使用OpenGL;另一种是使用 Metal。 OpenGL的好处是跨平台,推出时间比较长,因此比较稳定...

音视频直播技术专家
2017/10/08
0
0
Metal入门教程(八)Metal与OpenGL ES交互

前言 Metal入门教程(一)图片绘制 Metal入门教程(二)三维变换 Metal入门教程(三)摄像头采集渲染 Metal入门教程(四)灰度计算 Metal入门教程(五)视频渲染 Metal入门教程(六)边界检测...

落影loyinglin
2018/08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS 调用Angularjs 的方法

// 1. 获取 Controllerlet appElement = document.querySelector('[data-ng-controller=MessagesCtrl]');let scope = angular.element(appElement).scope();// 2. 调用方法scope.l......

Moks角木
29分钟前
1
0
dubbo+zookeeper与 eureka的区别

CAP CAP 原则指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得 在分布式架构里, P必须有 Zookeeper保证C P 当...

群星纪元
39分钟前
2
0
云计算之边缘计算大势所趋

如果说边缘计算是公同认定的目标,那么我们看到,不同类型的厂商基于自身的特点,会从不同的起点、沿着不同的路径,向这个目标奔跑。上次参加阿里云的一次活动,看到他们将边缘计算的厂商分成...

linuxCool
43分钟前
0
0
前端通过后端传过来的'\n' ,''等字符串换行失败问题

后台推送换行符 '\n' 或 '<br/>' 等字符串到前台不会换行 详细描述 后台逻辑处理返回String字符串,其中包含\n或<br/>等换行符号,但是前端渲染时候却并没有真正的换行 也尝试了大佬的各种 ...

下次用oschina
50分钟前
2
0
volatile能保证有序性吗?

在前面提到volatile关键字能禁止指令重排序,所以volatile能在一定程度上保证有序性。   volatile关键字禁止指令重排序有两层意思:   1)当程序执行到volatile变量的读操作或者写操作时...

无精疯
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部