【OpenGL】一步步写PBR渲染器-第一章初识OpenGL及PBR

第一章 初识OpenGL及PBR

 

     本文由@GarsDong 出品,转载请注明出处  

一、初识OpenGL

1.1 什么是OpenGL?

OpenGL的英文全称是Open Graphics Library, 是图形的应用编程接口(API)

根据百度的定义:OpenGL是应用于渲染2D、3D矢量图形的跨语言跨平台的应用程序编程接口。与之同类的是用于Windows的Direct3D。 

另一种理解是,OpenGL和普通的API不同,它是一种规范(specification),由OpenGL架构评审委员会维护ARB;由Khronos Group进行开发及维护。常用的版本是3.3(version 330)文档链接如下:https://www.khronos.org/registry/OpenGL/specs/gl/glspec33.core.pdf 

(注:因为只是一个标准/规范,具体实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,大多数函数的位置都无法在编译时确定下来,需要运行时查询。开发者需要在运行时获取函数地址并将其保存在一个函数中供以后使用。这个过程非常复杂和繁琐,例如GLAD库就是简化这个过程。)  

 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一段基于D3D的PBR渲染示例代码: ```cpp // 初始化D3D设备和渲染 ID3D11Device* device; ID3D11DeviceContext* context; InitializeD3DDeviceAndRenderer(device, context); // 创建PBR材质 PBRMaterial material; material.albedo = { 1.0f, 1.0f, 1.0f }; material.metalness = 0.5f; material.roughness = 0.2f; material.normalMap = LoadTexture("normalMap.png"); material.metalnessMap = LoadTexture("metalnessMap.png"); material.roughnessMap = LoadTexture("roughnessMap.png"); // 创建PBR着色 PBRShader shader; shader.Create(device); // 加载模型和纹理 Model model = LoadModel("model.obj"); Texture2D texture = LoadTexture("texture.png"); // 设置PBR着色的参数 shader.SetCameraPosition(cameraPosition); shader.SetLightDirection(lightDirection); shader.SetMaterial(material); // 渲染模型 for (auto& mesh : model.meshes) { // 绑定材质纹理 shader.SetTexture(texture, 0); // 绑定网格顶点和索引缓冲区 UINT stride = sizeof(Vertex); UINT offset = 0; context->IASetVertexBuffers(0, 1, &mesh.vertexBuffer, &stride, &offset); context->IASetIndexBuffer(mesh.indexBuffer, DXGI_FORMAT_R32_UINT, 0); // 设置渲染状态 context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); context->RSSetState(rasterizerState); context->OMSetBlendState(blendState, nullptr, 0xFFFFFFFF); context->OMSetDepthStencilState(depthStencilState, 0); // 绘制网格 context->DrawIndexed(mesh.indexCount, 0, 0); } // 释放资源 texture.Release(); model.Release(); shader.Release(); material.Release(); ReleaseD3DDeviceAndRenderer(device, context); ``` 上述代码中,我们首先初始化了D3D设备和渲染,然后创建了PBR材质和着色。接着,加载了模型和纹理,并将PBR着色的参数设置为摄像机位置、光照方向和PBR材质。最后,我们遍历模型的每个网格,并绑定材质纹理、顶点和索引缓冲区以及渲染状态,然后调用DrawIndexed函数绘制网格。最后,释放了所有资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值