• 大小: 369KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-12-06
  • 语言: 其他
  • 标签: OpenGL  VS  

资源简介

该文件中包含多个OpenGL的简单实用例子,从最简单的绘图到比较复杂一点的渲染等。

资源截图

代码片段和文件信息

// Shape.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“

enum VAO_IDs { Triangles NumVAOs };
enum Buffer_IDs { ArrayBuffer NumBuffers };
enum Attrib_IDs { vPosition = 0 vColor=1};
GLuint VAOs[NumVAOs]; //定义GLuint类型的顶点数组
GLuint Buffers[NumBuffers]; //定义GLuint类型的缓存数组
const GLuint NumVertices = 6; //顶点的个数

int CHOICE = 0; //选择融混方式

//OpenGL的初始化过程
void init(void) {

//调用顶点着色器和片元着色器文件
ShaderInfo shader[] = {
{ GL_VERTEX_SHADER “GLSL.vert“ }
{ GL_FRAGMENT_SHADER “GLSL.frag“ }
{ GL_NONE NULL }
};
GLuint program = LoadShaders(shader);
glUseProgram(program);

glGenVertexArrays(NumVAOs VAOs); //返回NumVAOs个未使用的对象名到数组VAOs中,用作顶点数组对象(分配顶点数组对象名称)
glBindVertexArray(VAOs[Triangles]); //将顶点数组对象和其名称关联起来(绑定顶点数组对象)
//顶点数组
GLfloat vertices[NumVertices][2] = {
//正五边形
{ -0.6 -0.6 } { 0.6 -0.6 } { 0.0 0.8 }
{ 0.6 0.6 } { -0.6 0.6 } { 0.0 -0.8 }
};

GLfloat colors[NumVertices][4] = {
{ 1.0 0.0 0.0 0.5 }
{ 1.0 0.0 0.0 0.5 }
{ 1.0 0.0 0.0 0.5 }
{ 0.0 1.0 0.0 0.3 }
{ 0.0 1.0 0.0 0.3 }
{ 0.0 1.0 0.0 0.3 }
};

glGenBuffers(NumBuffers Buffers); //返回NumBuffers个未使用的缓存对象名称,并保存到Buffers数组中(分配缓存对象名称)
glBindBuffer(GL_ARRAY_BUFFER Buffers[ArrayBuffer]); //指定当前激活的缓存对象,缓存对象类型为GL_ARRAY_BUFFER(绑定顶点缓存对象)

glBufferData(GL_ARRAY_BUFFER sizeof(vertices)+sizeof(colors) NULL GL_STATIC_DRAW);

glBufferSubData(GL_ARRAY_BUFFER 0 sizeof(vertices) vertices);
glBufferSubData(GL_ARRAY_BUFFER sizeof(vertices) sizeof(colors) colors);

glVertexAttribPointer(0 2 GL_FLOAT GL_FALSE 0 NULL);
glVertexAttribPointer(1 4 GL_FLOAT GL_FALSE 0 (const GLvoid *)sizeof(vertices));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);

glClearColor(0.4 0.5 0.7 1.0);
}

//使用OpenGL进行渲染
void display() {
glClear(GL_COLOR_BUFFER_BIT); //清除帧缓存的数据再进行渲染,清除指定的缓存数据并重设为当前的清除值,GL_COLOR_BUFFER_BIT为颜色缓存清除
glBindVertexArray(VAOs[VAO_IDs::Triangles]); //选择作为顶点数据使用的顶点数组,并激活

//开启融混
glEnable(GL_BLEND);

if (CHOICE == 1)
{
glBlendFunc(GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA); //第一个为源融混参数的计算方式,第二个为目标融混参数的计算方式
glBlendEquation(GL_FUNC_ADD); //帧缓存和源数据颜色混合方式
}
if (CHOICE == 2)
{
glBlendFunc(GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA);
glBlendEquation(GL_FUNC_SUBTRACT);
}
if (CHOICE == 3)
{
glBlendFunc(GL_SRC_COLOR GL_DST_COLOR);
glBlendEquation(GL_MAX);
}
if (CHOICE == 4)
{
glBlendFunc(GL_SRC_ALPHA GL_DST_ALPHA);
glBlendEquation(GL_MIN);
}
if (CHOICE == 5)
{
glBlendFunc(GL_DST_COLOR GL_ONE_MINUS_DST_COLOR);
glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
}

glShadeModel(GL_FLAT);

//分别绘制两个三角形
glDrawArrays(GL_TRIANGLES 0 NumVertices/2);  //独立三角形
glDrawArrays(GL_TRIANGLES 3 NumVertices / 2);  //独立三角形

glFlush(); //强制之前的OpenGL命令立即执行,这样可以保证它们在一定时间内全部完成
}

void reshape(int widthint height)
{
glViewport(0 0 (GLsizei)width (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentit

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-22 17:47  0918150117杨小倩\
     目录           0  2018-05-19 15:26  0918150117杨小倩\Blending\
     目录           0  2018-05-19 15:26  0918150117杨小倩\Blending\Blending\
     文件        4568  2018-05-19 15:25  0918150117杨小倩\Blending\Blending\Blending.cpp
     文件        4722  2018-04-28 20:04  0918150117杨小倩\Blending\Blending\Blending.vcxproj
     文件        1698  2018-04-28 20:04  0918150117杨小倩\Blending\Blending\Blending.vcxproj.filters
     文件        2980  2018-03-14 15:10  0918150117杨小倩\Blending\Blending\LoadShaders.cpp
     文件        1224  2018-03-14 15:09  0918150117杨小倩\Blending\Blending\LoadShaders.h
     文件         171  2018-04-28 20:29  0918150117杨小倩\Blending\Blending\glsl.frag
     文件         183  2018-04-28 20:29  0918150117杨小倩\Blending\Blending\glsl.vert
     文件         214  2018-04-28 19:12  0918150117杨小倩\Blending\Blending\stdafx.cpp
     文件         528  2018-03-14 15:08  0918150117杨小倩\Blending\Blending\stdafx.h
     文件         236  2018-04-28 19:12  0918150117杨小倩\Blending\Blending\targetver.h
     文件         970  2018-04-28 19:12  0918150117杨小倩\Blending\Blending.sln
     目录           0  2018-05-22 15:32  0918150117杨小倩\Camera\
     目录           0  2018-05-22 15:32  0918150117杨小倩\Camera\Camera\
     文件        7716  2018-05-22 15:29  0918150117杨小倩\Camera\Camera\Camera.cpp
     文件        5021  2018-05-22 15:30  0918150117杨小倩\Camera\Camera\Camera.vcxproj
     文件        2075  2018-05-22 15:30  0918150117杨小倩\Camera\Camera\Camera.vcxproj.filters
     文件        2980  2018-03-14 15:10  0918150117杨小倩\Camera\Camera\LoadShaders.cpp
     文件        1224  2018-03-14 15:09  0918150117杨小倩\Camera\Camera\LoadShaders.h
     文件        1503  2018-05-22 15:28  0918150117杨小倩\Camera\Camera\ReadMe.txt
     文件         130  2011-02-21 21:45  0918150117杨小倩\Camera\Camera\primitive_restart.fs.glsl
     文件         300  2011-02-21 21:45  0918150117杨小倩\Camera\Camera\primitive_restart.vs.glsl
     文件         212  2018-05-22 15:28  0918150117杨小倩\Camera\Camera\stdafx.cpp
     文件         719  2018-04-23 20:54  0918150117杨小倩\Camera\Camera\stdafx.h
     文件         236  2018-05-22 15:28  0918150117杨小倩\Camera\Camera\targetver.h
     文件        3730  2018-04-20 10:49  0918150117杨小倩\Camera\Camera\vbm.cpp
     文件        1473  2018-04-20 10:50  0918150117杨小倩\Camera\Camera\vbm.h
     文件       16063  2018-04-20 10:50  0918150117杨小倩\Camera\Camera\vmath.h
     文件         393  2018-04-20 10:50  0918150117杨小倩\Camera\Camera\vutils.h
............此处省略90个文件信息

评论

共有 条评论