Vulkan正面缠绕顺序

我将Vulkan VkPipelineRasterizationStateCreateInfo配置为使用CCW缠绕顺序:

 VkPipelineRasterizationStateCreateInfo rasterizer = {};
 rasterizer.sType = VK_STRUCTURE_TYPE_PIpelINE_RASTERIZATION_STATE_CREATE_INFO;
 rasterizer.depthClampEnable = VK_FALSE;
 rasterizer.rasterizerDiscardEnable = VK_FALSE;
 rasterizer.polygonmode = VK_POLYGON_MODE_FILL;
 rasterizer.lineWidth = 1.0f;
 rasterizer.cullMode = VK_CULL_MODE_BACK_BIT;
 rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
 rasterizer.depthBiasEnable = VK_FALSE;

我的装配状态使用三角形风扇绘制四边形:

  VkPipelineInputAssemblyStateCreateInfo inputAssembly = {};
 inputAssembly.sType = VK_STRUCTURE_TYPE_PIpelINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
 inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN;
 inputAssembly.primitiveRestartEnable = VK_FALSE;

这是我的顶点缓冲区:

 const  VertexPos2Col3 vertices[4] = {
{{0.5f,0.5f},{1.0f,1.0f,1.0f}},{{-0.5f,{0.0f,0.0f}},-0.5f},0.0f,{{ 0.5f,1.0f}}
};

顶点的顺序是逆时针方向。但是仅当我设置了rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE;时,基元才会显示 这是为什么?

系统信息:

Windows 10,NVIDIA RTX3000,驱动程序:431.86

tiankongxiangyun 回答:Vulkan正面缠绕顺序

那是因为Vulkan使用的坐标系不同于例如OpenGL。 Vulkan的起源在左上方。

因此,您必须通过更改顶点/索引顺序,翻转视口或更改顶点着色器中的gl_position.y来解决此问题。如果您的目标支持VK_KHR_maintenance1扩展名,那么最简单的方法是转到use a negative height翻转视口。

本文链接:https://www.f2er.com/3142949.html

大家都在问