Opengl
你好,Albert
计算机视觉工程师
图形图像,AIGC
opengl,opencv
C/C++,oc,c#,python
目前在研究stable diffusion AI
展开
-
解决OpenGL绘制半透明物体时的显示问题的创新方法
【1】问题:Opengl绘制半透明物体时,会出现显示问题其他人的博客也有介绍:1.opengl渲染透明的三角面片的问题可以看出上图的斯坦福兔子渲染出来有很严重的阴影斑点问题。【2】 传统解决办法1. 油画家算法将场景中的三角面片根据深度进行排序,然后按照顺序进行描绘,一般是先绘制远处的场景,再绘制近处的场景。缺点:但如果两个多边形相交,就没法对他们进行排序了。甚至我们都不需要两个不同的物体来复现这个问题。组成玻璃杯的那些三角形会怎样?要让它们正确显示,需要在前面的绘制之前先绘制后面的三角面原创 2021-01-23 22:49:44 · 2496 阅读 · 0 评论 -
使用opengl对模型的双面渲染出不同颜色
紫色是正面,黄色是反面,红色是刷选中的部分。void ViewSpace::CShowShader::ShaderFrontAndBack(TriMesh* Tmesh){ Tmesh->need_Facenormals(); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); int fn = Tmesh->faces.size(); glCul.原创 2021-01-23 21:03:34 · 946 阅读 · 0 评论 -
画刷刷选出错:glreadpixels 获取深度时出错
使用opengl做刷选操作时,出错,获取的屏幕上的点是个无穷远的点。根据逻辑,是z深度检测出了问题。找到深度检测的代码:void GCamera::selection(int xPos,int yPos){ GLint vp[4]; glGetIntegerv(GL_VIEWPORT,vp); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glRenderMode(GL_SELECT); gluPickMatrix(xPos,vp原创 2021-01-04 10:33:23 · 683 阅读 · 0 评论 -
libigl学习--项目102_DrawMesh
步骤自己新建个win32项目。将102项目文件加载进来。主要代码如下://加载off模型 igl::readOFF(inFile, V, F); // Plot the mesh igl::opengl::glfw::Viewer viewer; viewer.data().set_mesh(V, F); viewer.launch();上述代码调用了launch(),里面用到了glfw3相关的文件,glad相关的文件。首先,把glad.c放置到项目文件夹里。然后,我们需要新.原创 2020-11-21 00:27:22 · 1105 阅读 · 0 评论 -
OpenGL进阶--VAO,VBO, EBO
顶点缓冲对象VBO要开始绘制某些东西,我们必须首先为OpenGL提供一些输入顶点数据。OpenGL是3D图形库,使我们在OpenGL中指定所有坐标在3D( x,y和z坐标)。OpenGL并不只是将您所有的3D坐标转换为屏幕上的2D像素;当他们在之间的特定范围的OpenGL仅处理3D坐标-1.0和1.0在所有3个轴(x,y和z)。所谓的所有坐标标准化设备坐标 范围将最终显示在屏幕上(该区域以外的所有坐标都不会显示)。因为我们要渲染一个三角形,所以我们要指定总共三个顶点,每个顶点具有3D位置。我们在floa原创 2020-11-02 09:41:04 · 433 阅读 · 1 评论 -
OpenGL4.0学习7--渲染一个模型
前言到目前为止,本教程的完整项目可以在我的资源中得到–OpenGL4.0+VS2019渲染一个模型 。本教程将介绍如何使用GLSL在OpenGL 4.0中渲染3D模型。本教程中的代码基于漫反射教程中的代码。在之前的教程中,我们已经渲染过3D模型,但是它们是由单个三角形组成的,相当没意思。现在已经涵盖了基础知识,我们将继续渲染一个更复杂的对象。在这种情况下,对象将是一个立方体。在介绍如何渲染更复杂的模型之前,我们将首先讨论模型格式。有许多工具可让用户创建3D模型。Maya和3D Studio Max是原创 2020-10-28 09:46:29 · 636 阅读 · 0 评论 -
OpenGL4.0学习6--漫射照明
在本教程中,我将介绍如何使用漫射照明和OpenGL 4.0照明3D对象。我们将从上一教程中的代码开始并进行修改。我们将要实现的漫射照明的类型称为定向照明。定向照明类似于太阳照亮地球的方式。它是一个距离很远的光源,根据它发出光的方向,您可以确定任何物体上的光量。但是,与环境照明(我们将很快介绍的另一种照明模型)不同,它不会照亮不会直接接触的表面。我之所以选择定向照明是因为它很容易在视觉上进行调试。同样,由于只需要一个方向,因此该公式比其他类型的漫射照明(如聚光灯和点光源)更简单。OpenGL 4.0中.原创 2020-10-26 23:00:56 · 574 阅读 · 0 评论 -
OpenGL4.0学习5.2--用bmp格式图片进行贴图
效果图modelclass.cpp主要是修改了函数InitializeBuffers(OpenGLClass * OpenGL)里面的顶点和索引数组。我们最终要显示一个图片,可以设计为两个三角面片。顶点分布如下:我们采用的左手坐标系,顶点索引编号按照顺时针,对应的纹理坐标://InitializeBuffers函数是我们处理创建顶点和索引缓冲区的地方。通常,您会读入一个模型并从该数据文件创建缓冲区。bool ModelClass::InitializeBuffers(OpenGLClass原创 2020-10-13 23:05:33 · 691 阅读 · 0 评论 -
OpenGL4.0学习5.1--纹理(Targa图片贴图)
本教程将说明如何在OpenGL 4.0中使用纹理。通过将纹理上的照片和其他图像应用到多边形,纹理可以使我们在场景中增加真实感。例如,在本教程中,我们将拍摄以下图像:图片文件在我的下载资源里,大家也可以去网上找一些targa格式的图片。然后将其应用于上一教程中的多边形以产生以下结果:我们将使用的纹理格式为.tga文件。这是一种称为targa的32位格式,支持alpha通道,可以使用大多数图像编辑应用程序创建。下一篇文章里,我会重点讲解32位和24,16,8位深度图片的区别。并且增加纹理格式 .bm原创 2020-10-13 21:19:25 · 761 阅读 · 0 评论 -
OpenGL4.0学习4--缓冲区,着色器和GLSL
本教程将介绍如何在OpenGL 4.0中编写顶点和像素着色器。这还将有在OpenGL 4.0中使用顶点和索引缓冲区的介绍。这些是您需要理解和利用以渲染3D图形的最基本概念。顶点缓冲区要理解的第一个概念是顶点缓冲区。为了说明这个概念,让我们以球的3D模型为例:3D球形模型实际上由数百个三角形组成:球体模型中的每个三角形都有三个点;我们称每个点为一个顶点。因此,要渲染球体模型,我们需要将形成球体的所有顶点放入一个特殊的数据数组中,该数据数组称为顶点缓冲区。一旦球体模型的所有点都在顶点缓冲区中,我们就原创 2020-10-09 19:43:55 · 723 阅读 · 2 评论 -
OpenGL 4.0 学习3.2--各种颜色的RGB值
用法设置时,黑色:rgb(0,0,0)。如果是ARGB,最后要加上透明度Alpha,比如(0.0,0.0,0.0,1.0),就是黑色不透明。(0.0,0.0,0.0,0.0)就是黑色透明。颜色RGB值原创 2020-10-06 19:24:03 · 7865 阅读 · 0 评论 -
OpenGL4.0学习3.1--初始化OpenGL 4.0
本教程将是使用OpenGL 4.0的第一个真正的介绍。我们将解决三个主要问题,它们是初始化OpenGL 4.0,关闭它以及使用它进行基本渲染。本教程使用与上一教程相同的类,不同之处在于,我们将为每个类添加更多代码,以利于使用OpenGL 4.0进行渲染。我们将通过查看填写好的OpenGLClass来开始本教程:Openglclass头文件中,OpenGL 4.0要求您在opengl32.lib库中进行链接。您可以在IDE中或直接在代码中执行此操作。我已将链接放入代码中,因为这是我的偏爱:#pragm原创 2020-10-06 18:33:36 · 1828 阅读 · 0 评论 -
OpenGL4.0学习2--基于win32创建框架和窗口
这个部分和DirectX12的创建框架和窗口的过程相似。在开始使用OpenGL 4.0进行编码之前,我建议您构建一个简单的代码框架。该框架将处理Windows的基本功能,并提供一种以有组织的可读方式扩展代码的简便方法。由于这些教程的目的只是为了尝试OpenGL 4.0的不同功能,因此我们将有目的地使框架尽可能的薄。框架框架将从五个项目开始。它将具有WinMain函数来处理应用程序的入口点。它还将具有一个系统类,该类封装将在WinMain函数中调用的整个应用程序。在系统类内部,我们将具有一个用于open原创 2020-09-24 19:39:32 · 305 阅读 · 0 评论 -
OpenGL4.0学习1--使用VS2019设置Opengl4.0
学习这个教程是为了了解不使用附加库,比如glfw等,怎么实现opengl的功能。当然想学习附加库,可以了解我的其他教程的,在这里不做赘述。在编写任何图形代码之前,我们需要具备执行此操作的工具。这些工具中的第一个是编译器,最好内置在不错的IDE中。我使用的是Visual Studio2019。还有其他几种可用,有些甚至可以免费使用。我将由您决定要选择哪一个。设置Visual Studio 2019对于每个教程,我都提供了源代码和数据文件,您可以将其复制并添加到项目中。但是要这样做,您首先需要创建一个项目原创 2020-09-24 16:18:40 · 688 阅读 · 0 评论 -
libigl库成功编译的学习笔记
工具vs2019,win10,git,cmake下载libigl使用git下载,我是2020年8月24下载的,我下载的版本9M左右。在git中输入git clone --recursive https://github.com/libigl/libigl.git如果显示faided,就清除一下端口,然后重新输入上面的。(注意:我没有翻q)git config --global --unset https.proxycmake下载下来后,一般在C:\Users\Administrato.原创 2020-08-25 09:42:03 · 1411 阅读 · 0 评论 -
OpenGL--恒星,卫星,行星系统
为了方便,先用金字塔,正方体,小正方体代替恒星,卫星,行星。并用矩阵堆栈的形式实现。#include <GL\glew.h>#include <GLFW\glfw3.h>#include <string>#include <iostream>#include <fstream>#include <cmath>#include <stack>#include <glm\glm.hpp>#inc原创 2020-08-24 15:20:42 · 515 阅读 · 0 评论 -
OpenGL--用一个立方体实例化为10万个立方体
为了 使用 实例 化 来 重复 我们 以前 的 翻滚 立方体 示例, 我们 需要 将 构建 不同 模型 矩阵 的 计算[ 先前 在 display() 中的 循环 内 实现] 移动 到顶 点 着色 器 中。 由于 GLSL 不提 供 平移 或 旋转 函数, 并且 我们 无法 从 着色 器 内部 调用 GLM, 因此 我们 需要 使用 工具 函数。 我们 还需 要将 C++/ OpenGL 应用 程序 中的“ 时间 因子” 通过 统一 变量 传递 给 顶点 着色 器。 我们 还需 要将 模型 和 视图 矩阵.原创 2020-08-22 20:05:18 · 396 阅读 · 0 评论 -
OpenGL--多个翻滚的立方体
#include <GL\glew.h>#include <GLFW\glfw3.h>#include <string>#include <iostream>#include <fstream>#include <cmath>#include <glm\glm.hpp>#include <glm\gtc\type_ptr.hpp> // glm::value_ptr#include <gl.原创 2020-08-21 17:23:12 · 260 阅读 · 0 评论 -
OpenGL--绘制有插值颜色的立方体
修改后的顶点着色器#version 430layout (location=0) in vec3 position;uniform mat4 mv_matrix;uniform mat4 proj_matrix;out vec4 varyingColor;void main(void){ gl_Position = proj_matrix * mv_matrix * vec4(position,1.0); varyingColor = vec4(position,1.0)*0.5.原创 2020-08-20 22:12:27 · 481 阅读 · 0 评论 -
OpenGL4.3需要的库
虽然一直在用Opengl,但是没有系统的学习过,前几天面试一家上海的公司时,被问到管线的知识,回答不上来,准备系统的学习Opengl,然后在csdn上更新自己的学习心得。语言和库C++开发环境:vs2019,官网下载安装即可。...原创 2020-08-18 15:14:28 · 746 阅读 · 0 评论 -
vs2019编译OpenGL遇到的LNK2019 无法解析的外部符号
在运行opengl的代码时遇到的问题1LNK4098 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library解决办法修改成或者修改成别的问题2LNK2019 无法解析的外部符号 __imp__TranslateMessage@4LNK2019 无法解析的外部符号 __imp__CreateDCW@16无法解析的外部符号 __imp__DragAcceptFiles@8解决在代码最上面添加#pragma comment (lib,“User3原创 2020-08-17 16:40:53 · 2322 阅读 · 1 评论