提示画像ですがこれはカメラの座標を中心にウインドウの範囲だけを描画するプログラムなのですがそれを実装するアルゴリズムがわかりません。提示コードを自分で実装してみたのですがカメラが動くと画像ようにうまく描画できませんどうやって実装するのでしょうか?
現状
カメラ座標(0,0)
プレイヤー座標(0,0) ゲームの仕様上画像には写ってません
マップチップ(100,100)
cpp
1 2void Stage::Renderer(const glm::mat4 view)const 3{ 4 5 glm::ivec2 cameraPosition = camera->getPosition(); 6 cameraPosition.x = cameraPosition.x / CELL; 7 cameraPosition.y = cameraPosition.y / CELL; 8 9 10 11 glm::ivec2 windowSize = FrameWork::GetWindowSize(); 12 windowSize.x = windowSize.x / CELL; 13 windowSize.y = windowSize.y / CELL; 14 15 16 17 18// printf("%d\n",cameraPosition.y - (windowSize.y / 2) /2); 19 //printf("%d\n\n",stage->at(0).size() - (stage->at(0).size() - windowSize.x) / 2); 20 //printf("%d\n\n",stage->at(0).size() - (stage->at(0).size() - windowSize.x) / 2); 21// printf("y %d\n\n",(cameraPosition.y - (windowSize.y / 2) / 2)); 22// printf(" < %d\n\n",((stage->size() - (stage->size() - windowSize.y)) / 2) ); 23 24 25 26 27 for(int y = cameraPosition.y - (windowSize.y / 2) / 2; (int)y <= (int)(((stage->size() - (stage->size() - windowSize.y)) / 2)) ; y++) 28 { 29// printf("y: %d\n",y); 30 31 if(y >= 0) 32 { 33 for(int x = cameraPosition.x - (windowSize.x / 2) / 2; (int)x <= (int)((stage->at(y).size() - (stage->at(y).size() - windowSize.x)) / 2); x++) 34 { 35// printf("x: %d\n",x); 36 37 if( (x >=0) && (y >= 0) ) 38 { 39 // printf("pos: %d , %d\n",x,y); 40 41 switch (stage->at(y).at(x)) 42 { 43 case 1: 44 { 45 FrameWork::Renderer_Sprite(view,tile, 46 //glm::vec3( (CELL * x) - (FrameWork::GetWindowSize().x / 2 - (CELL /2)),(FrameWork::GetWindowSize().y / 2.0f - (CELL / 2)) - (CELL * y),0) 47 glm::vec3( (CELL * x) - (CELL /2),(CELL / 2) - (CELL * y),0) 48 ,glm::ivec2(0,0),glm::ivec2(CELL,CELL)); 49 } 50 break; 51 } 52 } 53 } 54 55 } 56 } 57} 58
> カメラの座標を中心にカメラが写ってる範囲だけを描画する
(毎度のことですが)おっしゃっている意味がわかりません.
あなたの回答
tips
プレビュー