graphics3d::ToScreen()について
ヴート  2022/11/13(Sun) 08:51
擬似3D を作るにあたり3D 座標をスクリーン座標に変換する方法を探してて下記のページを見つけました。

https://qiita.com/Reputeless/items/a7d4465ad3347c746a90

Graphics3d::ToScreen()を見てこれだと思ったのですが、旧版の関数であるらしくOpenSiv3Dで利用することができませんでした。
名前が変わったのでしょうか? それともOpenでは実装されていないのでしょうか?
旧版で組むのも手かとは思うのですが、出来ればOpenでやってみたいので何か知っている方がいればご教授お願いします。
記事編集
Reputeless  2022/11/23(Wed) 21:16
BasicCamera3D::worldToScreenPoint() が使えます。


# include <Siv3D.hpp> // OpenSiv3D v0.6.6

void Main()
{
Window::Resize(1280, 720);
const ColorF backgroundColor = ColorF{ 0.4, 0.6, 0.8 }.removeSRGBCurve();
const MSRenderTexture renderTexture{ Scene::Size(), TextureFormat::R8G8B8A8_Unorm_SRGB, HasDepth::Yes };
DebugCamera3D camera{ renderTexture.size(), 30_deg, Vec3{ 10, 16, -32 } };

while (System::Update())
{
camera.update(2.0);

Graphics3D::SetCameraTransform(camera);

const Box box{ -8,2,0,4 };

{
const ScopedRenderTarget3D target{ renderTexture.clear(backgroundColor) };
box.draw(ColorF{ 0.8, 0.6, 0.4 }.removeSRGBCurve());
}

{
Graphics3D::Flush();
renderTexture.resolve();
Shader::LinearToScreen(renderTexture);
}

for (const auto& pos : box.getCorners())
{
if (const Vec3 screenPos = camera.worldToScreenPoint(pos);
0.0 < screenPos.z)
{
screenPos.xy().asCircle(5).draw();
}
}
}
}
編集
ヴート  2022/11/25(Fri) 00:12
ご多忙の中、返答ありがとうございます。
早速試して組み込んでみます。
編集
件名
Re: graphics3d::ToScreen()について
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -