Saya menggunakan kamera ortografi untuk membuat irisan model (untuk mengacaukannya). Saya membuat setiap irisan baik dari atas maupun bawah untuk menentukan apa yang ada di dalam setiap irisan.
Model I render adalah bentuk 'T' sederhana yang dibangun dari dua kubus. Kubus memiliki dimensi yang sama dan memiliki koordinat Y (tinggi) yang sama. Berikut ini rendernya di Blender:
Saya membuat model ini langsung dari atas dan sekali langsung dari bawah. Harapan saya adalah bahwa saya akan mendapatkan gambar yang persis sama (kecuali untuk mirroring pada sumbu y). Namun ketika saya render menggunakan target render resolusi sangat rendah (25x25) posisi (dalam piksel) dari 'T' berbeda ketika dirender dari atas sebagai lawan render dari bawah. Lihat gambar 2 dan 3. Blok merah muda bukan bagian dari render asli tetapi saya telah menambahkannya sehingga Anda dapat dengan mudah menghitung / melihat perbedaannya.
Diberikan dari atas
Diberikan dari bawah
Ini mungkin karena apa yang saya baca tentang koordinat pixel dan texel yang mungkin bias ke kiri atas seperti yang terlihat dari kamera. Karena saya menggunakan vektor 'naik' yang sama untuk kedua kamera saya, bias saya hanya terlihat pada sumbu x. Saya sudah mencoba mengubah posisi kamera dan melihat-oleh, apa yang saya pikir, harus setengah piksel. Saya sudah mencoba menggeser satu kamera dan menggeser kedua kamera dan sementara saya melihat beberapa efek, saya tidak bisa mendapatkan salinan sempurna pixel-by-pixel dari kedua kamera.
Di sini saya menginisialisasi kamera dan menghitung, apa yang saya yakini, setengah piksel. boundsDimX dan boundsDimZ adalah kotak pembatas yang sedikit diperbesar di sekitar model yang juga saya gunakan sebagai lebar dan tinggi volume tampilan kamera ortografis.
Matrix projection = Matrix.CreateOrthographic(boundsDimX, boundsDimZ, 0.5f, sliceHeight + 0.5f);
Vector3 halfPixel = new Vector3(boundsDimX / (float)renderTarget.Width, 0,
boundsDimY / (float)renderTarget.Height) * 0.5f;
Ini adalah kode tempat saya mengatur posisi kamera dan tampilan kamera
// Position camera
if (downwards)
{
float cameraHeight = bounds.Max.Y + 0.501f - (sliceHeight * i);
Vector3 cameraPosition = new Vector3
(
boundsCentre.X, // possibly adjust by half a pixel?
cameraHeight,
boundsCentre.Z
);
camera.Position = cameraPosition;
camera.LookAt = new Vector3(cameraPosition.X, cameraHeight - 1.0f, cameraPosition.Z);
}
else
{
float cameraHeight = bounds.Max.Y - 0.501f - (sliceHeight * i);
Vector3 cameraPosition = new Vector3
(
boundsCentre.X,
cameraHeight,
boundsCentre.Z
);
camera.Position = cameraPosition;
camera.LookAt = new Vector3(cameraPosition.X, cameraHeight + 1.0f, cameraPosition.Z);
}
Pertanyaan Utama Sekarang Anda telah melihat semua masalah dan kode yang dapat Anda tebak. Pertanyaan utama saya adalah. Bagaimana cara menyelaraskan kedua kamera sehingga masing-masing membuat gambar yang persis sama (dicerminkan di sepanjang sumbu Y)?
Jawaban:
Ini adalah pandangan yang berbeda tentang masalah yang disajikan, yang mungkin membantu untuk menghindari masalah perbedaan rasterisasi sama sekali
Apakah Anda mempertimbangkan untuk menjaga semuanya tetap pada tempatnya, tetapi meningkatkan Y dari model (kubus) dengan '-1' di sepanjang bagian pesawat? Maka Anda akan memiliki segalanya persis sama kecuali untuk benda-benda yang terbalik - artinya Anda akan mendapatkan sisi bawahnya untuk tujuan Anda. Tentu saja Anda perlu '-1' normals dan poligon yang menghadap ke arah juga.
sumber