3D Model Formatları · OBJ · Temel Yapı
Face Tanımları: OBJ'de f Satırları ve
Topoloji Birleştirmesi
«Köşeler var, model içi boş veya delikli» çoğu zaman yanlış
f winding'i veya kopuk indeks zinciridir.
Vertex Listesi
konum havuzunu sabitledi; bu sayfa Temel Yapı hattının topoloji adımına geçer:
hangi vertex indeksleri hangi yüzeyi kaplar?
Holodepth'te face satırı OBJ'nin «çizilebilir geometri» sözleşmesidir. Yalnızca
v listesi nokta bulutudur; f köşeleri birleştirerek
üçgen, dörtgen veya çokgen yüzey tanımlar. Her köşe referansı isteğe bağlı
olarak vt ve vn indekslerini taşır; slash sözdizimi
bu üç havuzu face seviyesinde eşler. Normal vektörün kendisi
Normal
Verileri'nde; UV koordinatının kendisi
UV Verileri'nde
kalır.
Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz: «OBJ face, 1-based vertex (ve isteğe bağlı vt/vn) indekslerinin yüzey döngüsüdür. Üçgen ve dörtgen yaygındır; n-gon loader'da triangulate edilir. Negatif indeks sondan sayar. Winding yönü ön/arka yüz ve normal türetimini etkiler. glTF'deki indices accessor aynı topoloji fikrinin binary karşılığıdır; detay Index Buffer sayfasındadır.»
Bu sayfanın sınırı · komşu konularla ayrım
Bu sayfa OBJ face topolojisini anlatır:
fsatır sözdizimi (v/vt/vnbirleşimi)- Üçgen, quad, n-gon ve triangulation beklentisi
- Negatif indeks kuralı
- Winding (dolaşım yönü) ve görünürlük
- Eksik
vt/vnbileşenleri - Face ile obje/materyal sınırı (üst seviye)
- Holodepth teşhis açıları
Bilinçli olarak dışarıda bırakılan konular:
vkoordinat havuzu → Vertex Listesivnvektör tanımı → Normal VerilerivtUV tanımı → UV Verileri- MTL,
usemtl,map_Kd→ MTL Sistemi - glTF accessor byte düzeni → Index Buffer (glTF)
ssmoothing group derinliği → Normal Verileri / export notları- OBJLoader triangulation kodu → Three.js
Kısa ayrım: Face Tanımları «hangi indeksler bir yüzey?» · Vertex Listesi «indeks neyi işaret eder?» · Index Buffer (glTF) «indeksler binary'de nasıl?»
Temel Yapı · topoloji adımı
| Sıra | Önek | Rol | Sayfa |
|---|---|---|---|
| Önce | v |
Konum havuzu | Vertex Listesi |
| Şimdi | f |
Yüzey birleştirme | Face Tanımları (bu sayfa) |
| Sonra | vn · vt |
Shading ve doku köşesi | Normal · UV |
Topoloji rolü: noktadan yüzeye
Wavefront OBJ geometriyi referans tabanlı kurar: önce köşe konumları
birikir, sonra face satırları bu köşeleri kapalı döngüler halinde birleştirir.
Bu, glTF'de tek primitive içinde attributes.POSITION +
indices birlikteliğine kavramsal karşılıktır; fark OBJ'nin metin
ve ayrık listeler kullanmasıdır.
Vertex listesi haritadaki noktaları işaretler. Face satırları «şu noktaları birleştir, bu parsel yüzeydir» der. Normal ve UV, face köşesinde hangi listeden okunacağını slash ile seçer; yüzeyin kendisi yine
fsatırındadır.
Holodepth debug sırası: «mesh yok» şikayetinde önce
Vertex Listesi teşhisi, ardından «en az bir geçerli
f var mı?» Bu sayfa ikinci kapıdır.
f slash sözdizimi:
v/vt/vn
Her face köşesi bir token'dır; slash ile üç bağımsız 1-based indeks birleşir:
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
# Örnek: yalnızca konum (vt ve vn atlanmış)
f 1 2 3
# Tam köşe: konum / uv / normal
f 1/1/1 2/2/2 3/3/1
| Yazım | Anlam |
|---|---|
f v1 v2 v3 |
Yalnızca vertex indeksi; vt/vn sonradan veya varsayılan |
f v1/vt1 v2/vt2 v3/vt3 |
Konum + UV; normal ayrı hesaplanabilir |
f v1//vn1 v2//vn2 v3//vn3 |
Konum + normal; UV yok (çift slash) |
f v1/vt1/vn1 ... |
Üç liste tam eşleme |
Üç indeks listesi birbirinden bağımsız büyür (
Vertex Listesi ·
indeks). Face'teki 2/5/1 «ikinci v, beşinci vt, birinci vn»
demektir; aynı spatial köşede farklı vt UV seam'i için farklı token
kullanılır.
Üçgen, dörtgen ve n-gon
OBJ face üç veya daha fazla köşe kabul eder. WebGL ve çoğu gerçek zamanlı motor yalnızca üçgen çizer; dörtgen ve n-gon loader veya export aracında triangulate edilir. Format quad'ı yasaklamaz; runtime davranışı triangulation kuralına bağlıdır.
- Üçgen (
f 1 2 3): en güvenli; winding net - Quad (
f 1 2 3 4): DCC'den sık; diagonal seçimi görünümü değiştirebilir - n-gon: concave polygon triangulation hatası riski; CAD'den gelebilir
# Aynı quad, iki tri ayrımı (kavramsal)
# f 1 2 3 4 → (1,2,3) + (1,3,4) veya (1,2,4) + (2,3,4)
# Farklı diagonal = farklı normal interpolasyonu / UV warp
Holodepth web hedefi: glTF export öncesi quad'ları bilinçli üçgenlemek winding ve UV tutarlılığı için tercih edilir. OBJ ara dosyada quad bırakmak mümkündür; pipeline sorumluluğu triangulation algoritmasını dokümante etmektir.
Negatif indeks: sondan sayma
Face token'ında negatif sayı «listenin sonundan» anlamına gelir:
-1 son vertex (veya son vt/vn, hangi bileşense). Bu, modüler OBJ
üretiminde «son eklenen köşeyi kapat» kalıbını kısaltır; parser'da liste boyutu
gerekir.
v 0 0 0
v 1 0 0
v 0 1 0
f -3 -2 -1
# f 1 2 3 ile aynı üçgen (üç v satırı varsayımıyla)
Karışık pozitif/negatif kullanım geçerlidir; hata ayıklamada okunabilirliği düşürür. Holodepth CI: üretim OBJ'lerinde negatif indeks ya tamamen yasak ya da tek stil rehberi ile sınırlandırılır; golden parse testleri pozitif forma göre yazılır.
Winding order: ön yüz, arka yüz, flip
Köşelerin face içindeki sırası (saat yönü / saat tersi) yüzeyin «ön» tarafını belirler. Backface culling açık renderers'ta ters winding görünmez yüzey üretir; «içi dışarı model» şikayetinin kökü çoğu zaman global scale -1 veya yanlış triangulation diagonal'ıdır.
glTF index buffer'da winding kavramı aynı mantıkla anlatılır (
Index Buffer · winding); OBJ'de sıra doğrudan
f token dizisindedir. Normal vektör dosyada ayrı
(vn) olsa bile tutarsız winding + otomatik normal hesabı çakışma
üretir (
Normal
Verileri).
- Right-hand rule: parmak uçları köşe sırası, başparmak normal
- Mirror export: tek eksen flip winding'i tersine çevirebilir
- Double-sided materyal: culling kapalı; hata gizlenir, performans düşer
Eksik bileşenler ve tutarlılık
Face'te yalnızca v indeksi verildiğinde loader genelde düz
shading veya hesaplanmış normal kullanır; UV yoksa doku uygulanamaz veya
varsayılan (0,0) kullanılır. Karışık dosyalar (bazı face'lerde vt, bazılarında
yok) validator uyarısı üretmeli; sessiz devam texture stretch ile biter.
Köşe başına tutarlılık kuralı: aynı face içinde tüm token'lar aynı «şablonu»
takip etmeli (hepsi v/vt/vn veya hepsi yalnızca v).
Bir köşede 1/2/1, diğerinde yalnızca 3 spec açısından
yorumlanabilir ama export araçları arasında farklı davranış riski taşır.
İndeks taşması
f içindeki herhangi bir bileşen ilgili listenin boyutunu aşarsa
geometry bozulur veya parse reddedilir. Vertex sayısı küçük, face indeksi büyük:
tipik «OBJ birleştirme script'i yanlış offset» hatası.
Obje, grup ve materyal sınırı
o ve g satırları sonraki face'lerin mantıksal sahibini
değiştirir; vertex havuzu global kalır (
Vertex Listesi ·
o/g). usemtl name sonraki face'lere materyal atar; MTL
dosyasındaki tanım ayrı okunur (MTL Sistemi dalı).
Face sırası draw batch gruplamasına ipucu verir: aynı materyalin face'leri ardışık yazılırsa runtime daha az state değişimi. Format zorunlu kılmaz; optimizasyon export düzenidir. glTF'de karşılık material slot + primitive ayrımı farklı katmanda çözülür.
OBJ face → glTF indices
köprüsü
Dönüştürücü tipik olarak face döngülerini triangulate eder, köşe başına benzersiz (v, vt, vn) tuple oluşturur ve uint16/32 indices dizisi yazar. Welding identik tuple'ları birleştirir; UV seam'de tuple ayrılır ( Vertex Listesi · tekrar). OBJ metin face satırı glTF binary index buffer'a politika ile map edilir; birebir byte karşılığı yoktur.
Derin index buffer semantiği, winding tabloları ve non-indexed karşılaştırma Index Buffer (glTF) sayfasındadır. Face okuyucusu «OBJ tarafında topoloji metni»ni öğrenir; glTF tarafında «sıkışık indeks dizisi»ni.
Holodepth perspektifleri ve teşhis
Non-manifold ve T-junction
Üçten fazla yüzün aynı kenarı paylaşması veya «T» birleşimi CAD'den gelen OBJ'de sık görülür. Real-time motorlar sorunsuz çizebilir veya normal hesabını bozar; format hata vermez. glTF export öncesi mesh repair pipeline'ı face tabanlı teşhis gerektirir.
Line ve point elemanları (l,
p)
OBJ wireframe veya point cloud için l (polyline) ve p
(point) satırları da tanımlar. Holodepth Temel Yapı omurgası kapalı mesh'e
odaklanır; line/point ayrı import yoludur. «Face var ama çizgi de var» karışık
dosyada hangi primitive'in render edileceği ürün kararıdır.
Degenerate face
Aynı vertex indeksinin face içinde tekrarı (sıfır alanlı üçgen) parse geçer, culling ve ışık hesabında gürültü üretir. Export sonrası «degenerate triangle remove» adımı face listesi üzerinde çalışır.
Smoothing group ipucu
s off / s 1 gibi smoothing group satırları komşu
face'lerin normal interpolasyonunu etkiler; face topolojisi ile birlikte okunur.
Derinlik Normal Verileri sayfasına bırakılır; burada yalnızca «face sırası +
smoothing birlikte shading'i belirler» notu sabitlenir.
Face katmanı teşhis soruları
- En az bir geçerli
fsatırı var mı? - Tüm indeksler ilgili listelerin boyutunda mı?
- Quad/n-gon triangulation kuralı dokümante mi?
- Winding tutarlı mı (iç yüzey / flip)?
- vt/vn şablonu face'ler arasında karışık mı?
- Negatif indeks kasıtlı mı, test golden dosyayla uyumlu mu?
- Non-manifold kenar sayısı kabul edilebilir mi?
- glTF export sonrası index count beklenen tri sayısı ile örtüşüyor mu?
Holodepth içgörüsü
«Model delikli» raporunda önce tek face'i izole edin: üç bilinen
v ile f 1 2 3 winding'ini ters çevirin. Düzeliyorsa
sorun global scale değil topoloji yönüdür. Düzelmiyorsa indeks taşması veya
kopuk v havuzuna dönün.
Topoloji tamam; shading ve doku köşeleri
Face satırları «hangi köşeler birleşir?» sorusunu yanıtlar. Köşe başına ışık yönü ve doku adresi ayrı listelerden gelir:
- Normal listesi
Normal Verileri:
vnve face'te//vneşlemesi - UV listesi
UV Verileri:
vtve/vteşlemesi
Format okuyucusu özeti:
f= 1-based yüzey döngüsü; tokenv/vt/vn. Tri/quad/n-gon; negatif indeks; winding kritik. glTF indices dönüşümde triangulate + tuple welding. Normal ve UV içerikleri sonraki iki sayfada.