Hi, Ich raycaste gerade ein paar 3D metaballs was generell auch schon sehr gut klappt. Allerdings würde ich nun gerne in einem ersten pass 3D boundingSpheres mit der openGL fixed pipeline zeichnen, die dann als maske für den raycasting pass dienen sollen.
Die vorraussetzung damit das funktioniert ist, dass ich die gl_ModelViewPorjectionMatrix aus dem ersten Pass irgendwie auf die Kameraeinstellungen für meinen Raycasting shader übertrage.
Ich habe auch schon eine simple version, die funktioniert, allerding nur unter der vorraussetzung, dass die kamera die negative z achse hinunter schaut. dafür habe ich lediglich folgendes gemacht:
Code: //cam stuff float near = 1.0; float far = 100.0; float fov = 60.0; float asp = resolution.x/resolution.y; float half_height = near*tan(fov*0.5*half_pi); float half_width = half_height*asp; vec2 projPlane = vec2(half_width*2.0, half_height*2.0); ... void main(){ vec3 camPos = vec3(0.0, 0.0, 4.0); vec3 pixel = vec3(-projPlane/2.0+(gl_FragCoord.xy/resolution.xy)*projPlane, camPos.z-near); //ray origin auf die nearplane setzen vec3 rayDir = normalize(pixel-camPos); ....raycasting }
Meine frage ist nun: Was ist, wenn ich auch kamera rotationen erlauben möchte? Um die korrekte perspektive zu bekommen müsste ich doch gl_FragCoord.xy auf die nearplane projezieren, die dann aber eben gedreht wäre oder nicht? Muss ich zusätzlich meine metaball Positionen mit der entsprechenden Matrix multiplizieren?
Ich wäre für jegliche tipps dankbar!
|