ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.01.20[水] Android OpenGLでobjファイルを読み込む編 part 4

前回part3で、できたと思っていたら、痛恨のミスを犯していたというか、まったく理解が足りてなかったというか。

問題が起きたのは、

・頂点を共有するトライアングルポリゴンが二枚以上
・共有している頂点に対応するテクスチャ座標が異なる

という情報の入ったobjファイルをロードしたときでした。

glVertexPointer
glTexCoordPointer

で頂点座標とテクスチャ座標を設定し、

glDrawElements

で描画していたのですが、頂点座標とテクスチャ座標のデータが入った配列要素は、1対1で設定しなければいけなかったのと、手元の最初に作ったサンプルのobjファイルではある頂点座標に対するテクスチャ座標は固定だったため、

「そりゃ、同じ頂点座標だから同じテクスチャ座標になるに決まってるじゃん」

とでかいミスを犯して、

頂点座標数 < テクスチャ座票数

だったのを、ある頂点座標に対応するテクスチャ座標のうち重複するものを削除して、

頂点座票数 = テクスチャ座票数

にしてました……。
でも、

トライアングルポリゴン2つで構成された四角形に、3DCGソフトでUVマップしたテクスチャを貼り付けようとすると問題発覚。

tex.png

上記のようなテクスチャを張り付けると表示が壊れました。
残るは、

頂点座標+重複する頂点座標を加算 = テクスチャ座標

にしないとだめなのかなー増えるのやだなーと思って、色々情報を漁ってみたんですけど、glDrawElements描画時、頂点座標とテクスチャ座標のデータの並び的なオプションもなさそうで……。
結局頂点増やしました。
テクスチャ座標指定の重複を削除するより処理がシンプルー。

しかしロード長いです…。
かなりゴリゴリ書き殴っているので、高速化しなければ……。

以下、蛇足
少しでも早くなってくれればと思い、浮動小数点から固定小数点で計算するようにしました。
変換は、

浮動小数点数 x 65535 = 固定小数点数

らしいです?
iPhoneなどは固定小数点数を使わない方が逆によいみたいーだけどもってないし測ったことない。
どうなんだろ。
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/36-e7d0b6bd

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。