2016-04-16 13 views
0

私は常にカメラに直面するオブジェクトを取得しようとしています。私はこれを行うための方法を探しましたが、問題はモデルマトリックスの影響を受けないビューマトリックスにこの部分を入れたときです。モデル行列を使って変換するにはどうしたらいいですか?コード:GLMビューマトリックスはモデルマトリックスに影響を与えません

GLuint transformLocation=glGetUniformLocation(textureShaders,"transform"); 
glm::mat4 transform; 
glm::mat4 model; 
glm::vec3 playerPosition=user.getPosition(); 

model=glm::translate(model,glm::vec3(xpos,0.0f,zpos)); 

glm::mat4 view; 
    view=glm::lookAt(cam.getPositionVector(),cam.getPositionVector()+cam.getFrontVector(),cam.getUpVector()); 
glm::mat4 rotationMatrix=glm::transpose(glm::lookAt(glm::vec3(xpos,0.0f,zpos),playerPosition,glm::vec3(0.0f,1.0f,0.0f))); 
view*=rotationMatrix; 
glm::mat4 projection; 
projection=glm::perspective(45.0f,(float)900/(float)600,0.1f,100.0f); 

transform=projection*view*model; 
+0

「モデルマトリックスの影響を受けていない」とはどういう意味ですか? – Cubic

+0

私がそこに置いた翻訳はうまくいかないようです。 (それは(0,0,0)にとどまります) –

+0

さて、あなたの変換行列がどうなっているかチェックしましたか? – Cubic

答えて

1

あなたの「回転」行列は本当に意味がありません。

rotationMatrix=glm::transpose(glm::lookAt(glm::vec3(xpos,0.0f,zpos),playerPosition,glm::vec3(0.0f,1.0f,0.0f))); 

xposzposの両方がゼロであることが起こる場合を除く)回転行列でこれますない結果。 lookAtr * t(-pos)に分解できる変換行列を作成します(posと呼んでいます)。この行列の転置を構築すると、最後のwの座標が完全にスクランブルされる4番目の行に転記列が転記されます。

+0

どのようにして回転行列を設定できますか? –

+0

最も簡単な方法は、カメラの右上、上向き、前向きのベクトルからオルソゴナル行列を直接浮き彫りにすることです。フラクタルオブジェクトを常にカメラに当てたい場合は、イメージプレーンに平行な平面に横たわる平面を回転させたいだけです。カメラの右と上のベクトルがその平面を定義します。 – derhass

関連する問題