GLSLマテリアルにもバックカリングが必要だ

ちょっと改造しよう。

改造した

source/blender/src/drawview.c
void drawview3dspace(ScrArea *sa, void *spacedata)

source/blender/src/drawobject.c
draw_object

draw_mesh_object

draw_mesh_fancy
2287行付近

		if(draw_glsl_material(ob, dt)) {
			glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);

			glEnable(GL_CULL_FACE); // この行追加

			dm->drawFacesGLSL(dm, GPU_enable_material);
			if(get_ob_property(ob, "Text"))
				draw_mesh_text(ob, 1);
			GPU_disable_material();

			glFrontFace(GL_CCW);
		}

当初の目的を達成。
単に天球作ったときの操作性が気に入らなかっただけなんだけど。


同じファイルのdrawcameraで
glDisable(GL_CULL_FACE);
しているのが原因で裏面カリングが効いていないようだが、
その後で元に戻していないのはわざとなのだろうか?

違うところの気がする。


無改造Blenderで確認したところ裏面カリングに関しては

  • ○Textured
  • ×Shaded
  • ×Textured+GLSLマテリアル

という結果に。
if文の分岐で通ったりと通らなかったりする
glEnable(GL_CULL_FACE), glDisable(GL_CULL_FACE)
がどこかにあるっぽい。