holodepth

3D Model Formatları · OBJ · Temel Yapı

Vertex Listesi: OBJ'de v Satırları ve Konum Havuzu

«OBJ açıldı ama mesh yok» çoğu zaman face satırı eksikliği değil; v havuzunun ne anlama geldiğinin atlanmasıdır. glTF Web İçin Kullanım omurgası kapandı; Holodepth OBJ dalının Temel Yapı hattına geçer. Bu sayfa birinci soruya odaklanır: dosyada köşe konumları nasıl listelenir ve indeks nasıl doğar?

Holodepth'te OBJ «tek satırlık format» gibi görünür; derinlik ayrık listelerdedir. Vertex listesi yalnızca dünya uzayındaki (veya obje uzayındaki) nokta koordinatlarını taşır; yüzey, normal, UV ve materyal başka satır ailelerindedir. Bu sayfa v satırının sözleşmesini, 1-based indeks havuzunu ve köşe tekrarı mantığını sabitler. Face birleştirme Face Tanımları'nda; glTF POSITION accessor'ı Vertex Verileri (glTF)'nde kalır.

Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz: «OBJ vertex listesi sıralı bir konum havuzudur; her v satırı x y z (isteğe bağlı w) yazar ve 1'den başlayan indeks üretir. v tek başına çizilebilir nokta bulutu veya face'lerin referans kaynağıdır; normal ve UV ayrı listelerdedir. Birim ve eksen dosyada zorunlu değildir; welding runtime kararıdır. Face satırları bu havuzdan indeks çeker.»

Bu sayfanın sınırı · komşu konularla ayrım

Bu sayfa OBJ vertex konum listesini anlatır:

  • v satır sözdizimi ve anlamı
  • 1-based indeks havuzu
  • Koordinat uzayı, birim ve eksen belirsizliği
  • Vertex tekrarı vs welding (format/runtime ayrımı)
  • o / g gruplama ile ilişki (üst seviye)
  • Parse ve teşhis açıları

Bilinçli olarak dışarıda bırakılan konular:

  • f face birleştirme → Face Tanımları
  • vn normal listesi → Normal Verileri
  • vt UV listesi → UV Verileri
  • MTL, usemtl, doku → MTL Sistemi
  • glTF accessor / bufferView → Vertex Verileri (glTF)
  • OBJ limitleri (animasyon, PBR) → Limitleri grubu
  • OBJ vs glTF karşılaştırma → OBJ vs glTF dalı
  • OBJLoader API → Three.js varlık yükleme

Kısa ayrım: Vertex Listesi (OBJ) «konum havuzu nedir?» · Face Tanımları «indeksler nasıl birleşir?» · Vertex Verileri (glTF) «POSITION accessor nedir?»

Temel Yapı hattı birinci soru

Katman OBJ öneki Soru Sayfa
1 · Konum v Köşe nerede? Vertex Listesi (bu sayfa)
2 · Topoloji f Yüzey hangi indekslerle? Face Tanımları
3 · Normal vn Işık yönü hangi vektör? Normal Verileri
4 · UV vt Doku koordinatı nedir? UV Verileri

OBJ vertex listesi nedir?

Zihin modeli: adres defteri, henüz çizilmemiş harita

  • Her v satırı = deftere bir adres (x, y, z).
  • Sıra numarası = 1-based indeks (ilk v → 1).
  • Face satırları = «şu adreslere git» talimatı (sonraki sayfa).
  • Çizim = face olmadan nokta bulutu; face ile kapalı mesh.

Wavefront OBJ metin formatında geometri liste tabanlıdır. Vertex listesi dosyanın en temel geometrik tablosudur: yalnızca konum. Normal ( vn) ve texture koordinatı (vt) ayrı tablolarda tutulur; face satırı bunları isteğe bağlı birleştirir. Bu ayrım glTF'deki tek attributes paketinden farklıdır; OBJ okuyucusu önce havuzları doldurur, sonra topolojiyi kurar.

# Minimal vertex örneği
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 0.5 1.0 0.0
# Henüz face yok: üç nokta, sıfır yüzey

Holodepth terminolojisi: «vertex listesi» = tüm v satırlarının dosya sırasıyla oluşturduğu dizi. Loader'lar genelde bunu bellekte Vector3[] veya benzeri yapıya çevirir; format seviyesinde hâlâ metin satırlarıdır.

glTF'de köşe genelde «mesh primitive attribute» içinde sıkışık byte dizisidir. OBJ'de köşe «satır satır insan okunur koordinat»tır. İkisi aynı 3D noktayı temsil edebilir; paketleme ve indeks modeli farklıdır.

v satır sözdizimi

Standart form:

v x y z [w]
v alanları
Alan Zorunlu Anlam
x y z Evet (pratik) Kartezyen konum; float metin
w Hayır Homojen bileşen; çoğu dosyada yok veya 1.0

Örnekler:

v -2.5 0.0 10.12
v 0.1 0.2 0.3 1.0
v 1.000000e+02 -3.141592e-01 0

OBJ sayıları ASCII float'tır; bilimsel gösterim geçerlidir. Virgül ondalık ayırıcı değildir (locale tuzağı: Avrupa export araçları bazen virgül üretir; spec dışı). Boşluk tek boşluk veya tab ile ayrılır; fazla whitespace çoğu parser'da tolere edilir.

Yorum satırları ve boş satırlar

# ile başlayan satırlar yorumdur; koordinat değildir. Üretim dosyalarında DCC adı, tarih, birim notu yorumda kalır; parser atlar. Holodepth: birim bilgisi yorumda yazıyorsa onu metadata sayın, spec zorunluluğu değil.

1-based indeks: havuz adresi

OBJ'nin en sık bug kaynağı: indeksler 1'den başlar. İlk v satırı indeks 1'dir; face satırı f 1 2 3 dediğinde ilk üç vertex'i kasteder (face detayı sonraki sayfada). Programlama dillerinin 0-based dizileri ile OBJ metni arasında «bir kaydırma» vardır; parser bunu üstlenir, elle indeks okuyorsanız siz üstlenirsiniz.

  • v indeksi yalnızca v listesine göredir
  • vt indeksi ayrı 1-based vt listesi ( UV Verileri)
  • vn indeksi ayrı 1-based vn listesi ( Normal Verileri)

Üç liste birbirinden bağımsız büyür. Aynı konum için farklı UV veya normal istendiğinde OBJ tipik olarak vertex satırını tekrarlar veya face'te farklı vt/vn indeksleri kullanır; welding stratejisi Face ve Normal sayfalarında netleşir. Vertex listesi tarafında kural: her yeni v yeni bir indeks üretir, önceki indeksler kaymaz.

Negatif indeks (face tarafında önizleme)

Face satırlarında negatif indeks «sondan say» anlamına gelir; vertex listesi boyutunu bilmeden anlamlıdır. Vertex sayfasında not: negatif indeks v tanımında değil, f kullanımındadır ( Face Tanımları).

Koordinat uzayı, eksen ve birim

OBJ spesifikasyonu eksen yönünü veya birimi dosya içinde kilitlemez. Pratikte çoğu DCC sağ el koordinat sistemi ve Y-up export eder; bazı CAD Z-up verir. Holodepth kuralı: vertex listesi «ham sayılar»dır; sahne ölçeği ve eksen dönüşümü import pipeline'ında (glTF'ye çevirirken özellikle) uygulanır.

  • Birim yok: 1.0 = 1 metre mi milimetre mi dosyadan okunmaz
  • Ölçek yok: global scale vertex satırında çarpan taşımaz
  • Origin: (0,0,0) anlamlı olabilir veya olmayabilir

Web'de glTF interchange hedefi birim tutarlılığı ister; OBJ ara formatında bu boşluk sık görülür. Import köprüsü Limitleri ve Import / Export Köprüsü dallarında (planlanan omurga) bu dönüşümü üstlenir; vertex listesi sayfası yalnızca «dosyada ne yazıyor?» der.

Sınır kutusu ve precision

Vertex listesinden min/max x,y,z ile axis-aligned bounds hesaplanır; culling ve kamera framing için ilk geometrik özet budur. Çok büyük veya çok küçük koordinatlar float precision kaybına yol açabilir; CAD export'ta «model kilometre ölçeğinde» uyarısı vertex değerlerinden okunur.

Vertex tekrarı ve welding

OBJ aynı (x,y,z) değerine sahip iki v satırına izin verir; bunlar farklı indekslerdir. Sebep: aynı konumda farklı normal veya UV gerektiğinde köşe «koparılır» (hard edge, UV seam). Format welding yapmaz; tam eşleşen satırları birleştirmek isteğe bağlı loader optimizasyonudur.

Tekrar türleri
Durum OBJ dosyasında Runtime
Identik koordinat, ayrı v İki satır, iki indeks Weld edilebilir veya ayrı kalır
UV seam Genelde ayrı v veya ayrı vt İndeksli birleşim
Hard edge Ayrı vn veya ayrı v Normal ayrımı

glTF tarafında benzer kavram «indexed geometry + split attribute» ile çözülür ( Vertex Verileri). OBJ'de tekrar «satır tekrarı» olarak görünür; dosya boyutu ve parse süresini artırır (Limitleri · Büyük Dosya Boyutu konusuna köprü).

o ve g: obje / grup bağlamı

OBJ'de o object_name ve g group_name satırları sonraki face'lerin hangi mantıksal objeye ait olduğunu işaretler. Vertex listesi global havuz olarak kalır; obje satırı vertex koordinatlarını bölmez, yalnızca face atamasını etkiler. Bazı exporter'lar obje başına vertex blokları yazar (okunabilirlik); indeks yine global sırayla devam eder.

Holodepth: çok objeli CAD export'ta tek v havuzu + çok o yaygındır. Runtime'da obje başına mesh ayrımı face ve o sınırlarından türetilir; vertex sayfasında «havuz tek» kuralını hatırlamak face parse hatalarını azaltır.

OBJ v vs glTF POSITION (köprü)

Karşılaştırma tam «OBJ vs glTF» dalında genişler; burada yalnızca vertex katmanı:

Konum verisi: OBJ vs glTF (özet)
Soru OBJ glTF
Temsil v metin satırları Binary float accessor
İndeks 1-based, face ile 0-based accessor + indices
Normal/UV Ayrı listeler Aynı primitive attributes
Topoloji Face satırı şart indices accessor

glTF'ye dönüşümde OBJ v dizisi genelde tek POSITION buffer'a düzleşir; welding ve indeks yeniden yazımı dönüştürücü politikasıdır. Format okuyucusu OBJ'de önce havuzu, glTF'de önce primitive sözleşmesini öğrenir.

Satır odaklı parse ve bellek

OBJ vertex listesi streaming ile okunabilir: her v satırında bir nokta eklenir; tüm dosya belleğe alınmadan sayım yapılabilir. Büyük scan/CAD dosyalarında vertex satırı sayısı milyonları bulur; «kaç v var?» sorusu face'ten önce yanıtlanır.

  • İki geçiş: önce v/ vt/ vn say, sonra face (bellek planlama)
  • Tek geçiş: dinamik dizi büyütme; basit ama realloc maliyeti
  • Hata: eksik bileşenli v (yalnızca x) spec dışı; parser reddi veya sessiz 0 padding riski

Runtime performans karşılaştırması OBJ vs glTF dalında; vertex listesi «metin float parse CPU maliyeti»ni format gerekçesi olarak not eder. Web dağıtımında OBJ nadir doğrudan kullanılır ( Neden glTF).

Holodepth perspektifleri: çoğu dokümanda olmayan açılar

«v = köşe» tanımının ötesinde üretim ve dönüşüm gerçekleri:

Face'siz v = nokta bulutu

LiDAR/scan pipeline'ları bazen yalnızca v satırları üretir; mesh henüz yoktur. Viewer'da nokta olarak çizilir; face eklenince aynı havuz mesh olur (Kullanım Alanları · Scan Data konusuna köprü).

Off-by-one importer tuzağı

Kendi OBJ yazıcınızda face indeksini 0-based sanmak ilk üçgeni kaydırır; delik veya çöp geometri üretir. Test: tek üçgen küp, bilinen v ve f 1 2 3 ile golden parse.

w bileşeni ihmal

Çoğu parser w'yi okumaz; perspektif veya rational spline export'ta w ≠ 1 olabilir. Holodepth: w varsa ve ≠ 1 ise divide-by-w uygulanıp uygulanmadığını pipeline dokümante edin; sessiz yok sayma şekil bozar.

Vertex merge glTF export'ta

Identik v satırlarını birleştirmek dosyayı küçültür; UV seam'de birleştirmek mesh'i bozar. Merge yalnızca tam attribute eşleşmesinde; konum welding'i Face/UV/Normal sayfalarıyla birlikte karar verilir.

Yedi soruluk vertex teşhisi

Vertex listesi kontrol listesi
Soru Yeşil ise Kırmızı ise bak
En az bir v var mı? Konum havuzu dolu Boş veya yalnız face
Her v üç (veya dört) sayı mı? Parse güvenli Bozuk satır, locale virgül
Bounds makul mü? Ölçek/birim şüphesi yok CAD mm/km karışıklığı
v sayısı face ihtiyacı ile uyumlu mu? İndeks taşması yok Face'te büyük indeks
Gereksiz duplicate v oranı? Weld/export optimizasyonu Şişkin dosya
Birim yorumda veya harici doc'ta mı? Import ölçeği bilinir Sessiz 1000× scale hatası
glTF dönüşümünde eksen notu var mı? Y-up tutarlı Yan yatan model

Holodepth içgörüsü

OBJ debug'unda önce face'e değil v satırı sayısı ve min/max bounds'a bakın. Havuz sağlamsa topoloji face'tedir; havuz boş veya absürt ölçekteyse face düzeltmek zaman kaybıdır. Vertex listesi tüm Temel Yapı hattının zeminidir.

Konum havuzu tamam; sıradaki topoloji

v listesi ile «nerede?» sorusu yanıtlandı. Temel Yapı hattının ikinci adımı «hangi köşeler bir yüzey?» sorusuna geçer:

  1. Face tanımları Face Tanımları: f satırları, v/vt/vn birleşimi, quad/tri, negatif indeks
  2. Normal listesi Normal Verileri
  3. UV listesi UV Verileri

Format okuyucusu özeti: OBJ vertex = 1-based konum havuzu; v x y z [w]. Tek başına nokta bulutu; face ile mesh. Normal ve UV ayrı listeler; welding format değil loader kararı. glTF POSITION ile köprü dönüşümde kurulur.