opengl环境搭建

在开始本篇教程之前,先介绍一篇opengl中文教程

opengl中文教程网站


下面就开始本次教程


 glfw下载

An OpenGL library | GLFW



下载glew

GLEW: The OpenGL Extension Wrangler Library


建一个文件夹,把上面下载的两个包都放到这个文件夹,并解压

 


下面开始打开vs,新建一个项目

 

 

opengl32.lib
glfw3.lib
glew32s.lib


 下面代码是打开一个窗口

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

#include <iostream>>
#include "stdafx.h"
#define GLEW_STATIC
#include <GL\glew.h>
#include <GLFW\glfw3.h>


int main()
{

	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	//开窗
	GLFWwindow * window = glfwCreateWindow(800,600,"learnopengl",NULL, NULL);
	if (window == NULL) {
		printf("fail create window");
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);

	//
	if (glewInit() != GLEW_OK) {
		printf("init glew fail");

		glfwTerminate();
	}
	glViewport(0, 0, 800, 600);
	while (!glfwWindowShouldClose(window))
	{
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

	glfwTerminate();


	printf("hello hunk");
	getchar();

    return 0;
}

效果如下: 


下面开始画一个随着时间不断变化颜色的三角形

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

#include <iostream>>
#include "stdafx.h"
#define GLEW_STATIC
#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include<thread>

int main()
{
	float verticles[] = {
	-1,1,0,
	1,1,0,
	0,0.5f,0,
	0,0.5f,0,
	-1,0,0,
	1,0,0
	};

	float verticles1[] = { 
		-1.0f,-1.0f,0,
		1,0,0,
		1.0f,-1.0f,0,
		0,1,0,
		0,-0.0f,0,
		0,0,1
	};


	const char *vertexShaderSource = "#version 330 core                            \n"
		"layout (location = 0) in vec3 aPos;                                       \n"
		"layout (location = 2) in vec3 myColor;                                       \n"
		"out vec4 vertexxColor;                                                  \n"
		"void main()                                                               \n"
		"{                                                                         \n"
		"   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);                       \n"
		"   vertexxColor = vec4(myColor.x,myColor.y,myColor.z, 1.0);                                     \n"
		"}                                                                         \n";

	const	char* fragmentShaderSource =
		"#version 330 core                                                         \n"
		"out vec4 FragColor;                                                       \n"
		"in  vec4 vertexxColor;                                                  \n"
		"void main()                                                               \n"
		"{                                                                         \n"
		" FragColor =  vertexxColor;                                             \n"
		"}                                                                         \n";




	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

	//开窗
	GLFWwindow * window = glfwCreateWindow(800,600,"learnopengl",NULL, NULL);
	if (window == NULL) {
		printf("fail create window");
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);

	//
	if (glewInit() != GLEW_OK) {
		printf("init glew fail");

		glfwTerminate();
	}
	glViewport(0, 0, 800, 600);


	unsigned int vbo;
	glGenBuffers(1, &vbo);
	glBindBuffer(GL_ARRAY_BUFFER,  vbo);
	glBufferData(GL_ARRAY_BUFFER, sizeof(verticles), verticles, GL_STATIC_DRAW);
	glBindBuffer(GL_ARRAY_BUFFER, NULL);
	unsigned int vbo1;
	glGenBuffers(1, &vbo1);
	glBindBuffer(GL_ARRAY_BUFFER, vbo1);
	glBufferData(GL_ARRAY_BUFFER, sizeof(verticles1), verticles1, GL_STATIC_DRAW);
	glBindBuffer(GL_ARRAY_BUFFER, NULL);


	unsigned int vao;
	glGenVertexArrays(1, &vao);
	



	unsigned int veticleShader;
	veticleShader=glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(veticleShader, 1, &vertexShaderSource,NULL);
	glCompileShader(veticleShader);
	unsigned int fragmentShader;
	fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
	glCompileShader(fragmentShader);


	unsigned int shaderProgram;
	shaderProgram = glCreateProgram();
	glAttachShader(shaderProgram, veticleShader);
	glAttachShader(shaderProgram, fragmentShader);
	glLinkProgram(shaderProgram);
    //链接后就可以删除两个shader
    glDe...(veticleShader);
    glDe...(fragmentShader);

	while (!glfwWindowShouldClose(window))
	{
		//清屏
		glClearColor(0.2f,0.3f,0.3f,1.0f);
		glClear(GL_COLOR_BUFFER_BIT);


		//我准备了一个vao

		glBindVertexArray(vao);

		//画vbo里的内容,因此绑定vbo
		glBindBuffer(GL_ARRAY_BUFFER, vbo);
		//按取出数规则,将从vbo里拷贝到vao对应的槽位(pointer)上,注意我的用词是拷贝
		glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
		glEnableVertexAttribArray(0);
		//这里故意少写一个glVertexAttribPointer,直接enable,发现直接用了上次vao保存的数据
		glEnableVertexAttribArray(2);  //启用后,定点着色器(location = 2)对应变量才也可以从vao对应pointer取数据
		//开始画
		glDrawArrays(GL_TRIANGLES, 0, 6);
		glDisableVertexAttribArray(0);
		glEnableVertexAttribArray(2); 

		//画vbo1里的内容,因此绑定vbo1
		glBindBuffer(GL_ARRAY_BUFFER, vbo1);
		//按取出数规则,将从vbo里拷贝到vao对应的槽位(pointer)上,注意我的用词是拷贝
		glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
		glEnableVertexAttribArray(0);
		//按取出数规则,将从vbo里拷贝到vao对应的槽位(pointer)上,注意我的用词是拷贝
		glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3*sizeof(float)));
		glEnableVertexAttribArray(2);
		//开始画
		glDrawArrays(GL_TRIANGLES, 0, 3);
		//绘制完后禁用
		glDisableVertexAttribArray(0);
		glDisableVertexAttribArray(2);


		float timeValue = glfwGetTime();
		float greenValue = (sin(timeValue) / 2.0f) + 0.5f;
		int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");
		glUseProgram(shaderProgram);
		glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);


		glfwSwapBuffers(window);
		glfwPollEvents();

	}

	glfwTerminate();


	printf("hello hunk");
	getchar();

    return 0;
}

运行后结果画面 

FR:徐海涛(hunkxu)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装OpenGL OpenGL是一个图形库,需要安装才能使用。安装OpenGL的方法因操作系统而异,以下是Windows和macOS的安装方法: Windows:下载并安装Mingw-w64,选择64位版本并包含OpenGL支持。下载链接:https://sourceforge.net/projects/mingw-w64/ macOS:在终端中使用Homebrew安装OpenGL。打开终端并输入以下命令: brew install glew brew install glfw3 2. 安装IDE 编写OpenGL程序需要一个集成开发环境(IDE),可以选择以下其中一个: Visual Studio:适用于Windows系统,可从Microsoft官网下载并安装。下载链接:https://visualstudio.microsoft.com/downloads/ Xcode:适用于macOS系统,可从App Store下载并安装。 3. 配置IDE 无论是Visual Studio还是Xcode,都需要配置才能使用OpenGL。以下是配置步骤: Visual Studio: 1) 创建一个Win32控制台应用程序项目。 2) 在项目属性中选择“配置属性”->“VC++目录”,将“包含目录”和“库目录”设置为OpenGL的安装路径。例如,如果OpenGL安装在C:\OpenGL,则包含目录应该为C:\OpenGL\include,库目录应该为C:\OpenGL\lib。 3) 在项目属性中选择“配置属性”->“链接器”->“输入”,将“附加依赖项”设置为opengl32.lib;glu32.lib;glew32.lib。 4) 在代码中包含OpenGL头文件和库文件。例如: #include <GL/gl.h> #include <GL/glu.h> #include <GL/glew.h> #pragma comment(lib, "opengl32.lib") #pragma comment(lib, "glu32.lib") #pragma comment(lib, "glew32.lib") Xcode: 1) 创建一个C++命令行工具项目。 2) 在“Build Settings”中,将“Header Search Paths”设置为OpenGL的安装路径。例如,如果OpenGL安装在/usr/local/include,则“Header Search Paths”应该为/usr/local/include。 3) 在“Build Settings”中,将“Library Search Paths”设置为OpenGL的安装路径。例如,如果OpenGL安装在/usr/local/lib,则“Library Search Paths”应该为/usr/local/lib。 4) 在“Build Phases”中,展开“Link Binary With Libraries”,添加以下库文件:OpenGL.framework、GLUT.framework、GLEW.framework。 5) 在代码中包含OpenGL头文件和库文件。例如: #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> #include <GLEW/glew.h> 注意:在macOS上,OpenGL和GLU库已经被包含在OpenGL.framework中,无需单独添加。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值