Im은 모델을 legolize하기 위해 셰이더 작성기가있는 형상 셰이더를 만들려고합니다. 우선 voxelization을 시도하는 중이지만 그 결과는 좋지 않으며 무엇이 잘못되었는지는 알 수 없습니다.형상 셰이더 voxelization이 잘못되었습니다
다음 코드를 사용하면 입력 삼각형의 중심점을 찾은 다음 생성하려는 상자의 중심으로 삼는 것이 좋습니다. 이 내가 가야 무엇 :
내가 아는는
이 메신저 얻는 것입니다 ... 세계에서 가장 우아한 코드가 아니라 최초의 첫째가는 그리고 난 그것이 작동되도록 할 필요가
uniform float stepi;
void main(void){
float step = stepi/2.;
vec3 bari = {(gl_PositionIn[0].x + gl_PositionIn[1].x +gl_PositionIn[2].x)/3,
(gl_PositionIn[0].y + gl_PositionIn[1].y +gl_PositionIn[2].y)/3,
(gl_PositionIn[0].z + gl_PositionIn[1].z +gl_PositionIn[2].z)/3};
vec3 bar = bari;
float dist = 0;
for(int i = 0 ; i < gl_VerticesIn ; i++)
{
gl_FrontColor = gl_FrontColorIn[ i ];
gl_TexCoord[0] = gl_TexCoordIn [ i ][ 0 ];
//-x
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y-step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y+step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y-step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y+step,bar.z-step,1) ;
EmitVertex();
EndPrimitive();
//-y
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y-step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y-step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y-step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y-step,bar.z-step,1) ;
EmitVertex();
EndPrimitive();
//-z
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y+step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y-step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y-step,bar.z-step,1) ;
EmitVertex();
EndPrimitive();
//+x
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y-step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z-step,1) ;
EmitVertex();
EndPrimitive();
//+z
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y+step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y-step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y-step,bar.z+step,1) ;
EmitVertex();
EndPrimitive();
//+y
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y+step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z+step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x-step,bar.y+step,bar.z-step,1) ;
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4(bar.x+step,bar.y+step,bar.z-step,1) ;
EmitVertex();
EndPrimitive();
}
}
어떤 기본 유형을 사용하고 있습니까? 삼각형 또는 쿼드입니까? – bwroga
네, 원시화에 따라 voxelizing 삼각형이 이상하게 보일 수도 있습니다. 예를 들어 두 개의 삼각형으로 구성된 쿼드를 예로 들어 보겠습니다. 하나의 삼각형의 중심은 다른 중심보다 약간 낮을 것이며 결과 복셀은 아마도 모든 축을 따라 서로 오프셋되어 보일 것입니다. 적어도 그것은 직관에 의한 것입니다. –
"이게 내가 얻는 것입니다 :"귀하의 알고리즘은 그렇게 할 수 없습니다. 삼각형의 중앙에 큐브를 만드는 것만으로는 원하는 것을 얻을 수 없습니다. –