サイト内検索
メインメニュー
クイックリンク
Blender本体、作品、文書等
BlenderFoundation
- Blenderのダウンロード
- 公式ギャラリー
- 公式チュート等
- 公式動画チュートリアル
- 公式 Wiki マニュアル
- 公式スクリプトカタログ
- Durian プロジェクト

日本語化・翻訳サイト
日本語化の設定など
ドキュメント翻訳プロジェクト(JBDP)
Python API Reference 日本語版

日本語初心者用チュートなど
WBS+

よくある質問と答え
BlenderFAQ

日本語コミュニティ
Blender@2ch
Studio MOMO(総合)
GameBlender Wiki
BLUG.JP
(BLender User Group of JAPAN)


ニュース(英文)
BlenderNation

Blenderコミュニティ
blenderartists.org
- フォーラム
- 記事検索
- New feature tests
- Model Repository

ギャラリーサイト
Blender ARt Gallery

開発サイト
Blender Project Site
- BugTracker
- BugTracker2.5用
- PatchTracker
Blender Wiki
開発情報
SVNコミットログ
SVNコミット速報

非公式テストビルド
Graphicall.org

GameBlender
公式マニュアル
専用API
BugTracker(専用)
Bullet 物理演算ライブラリ
Blender-Games.com

YafRay
YafRay
YafRay-TALK-JPN
YafRayFAQ

LuxRender
LuxRender私家版資料

Scripts & Plugins
Python2.6.4

(2.44-2.48は下記を使用)
Python2.5.2
(2.43-2.40は下記を使用)
Python2.4.2
(2.37a以前などは下記を使用)
Python2.3.5
Python Japan User's Group
BlenderArtists::python & plugins
Blender Plugin Repository
awalker's(?)page
L-sysytem(Blender Dungeon)

チュートリアルなど
Blender Cookie Blenderで3DCG制作日記 BlenderVideos.com Blender 3D: Noob to Pro
blenderguru
IngieBee's Blender site
Michael's Blender Website!

モデル&マテリアル
Blender Model Repository
Kator Legaz 3D Model
Blend Swap

マテリアル
blender-materials.org
Blender機能別: Blender2.34 OpenGL Normals  
執筆者: yamyam
発行日付: 2004/8/29
閲覧数: 1921
サイズは 3.10 KB
印刷用ページ 友達に教える
 

OpenGLの法線


by Ton Roosendaal



OpenGLによるライティング、法線、負のスケール



 デフォルトではOpenGLは負のスケールのObjectのライティングが苦手です。単に法線を反転し、シェーディングを反転しようと考えても―実際のライティング自身も反転し、Faceの「背面」と「前面」も入れ替わってしまいます。

この最初の画像はこれを表すもので、下の二つの球は通常のスケール、そして上の二つは負のスケールです。法線を反転し、前面・背面を入れ替えることで、反転したObjectの結果の外見はまだ「OK」です。



 このシチュエーションはOpenGLでDouble Sidedをライティングした時です。背面・前面が入れ替わった所為で、球が完全に黒くレンダリングされています。

負のスケールのObjectを使用する時、Blenderの"Double Sided"をOFFにすることが、通常の回避のアドバイスです。



 したがって、この問題の解決方法はObjectが「反転した」行列を持っているかどうか計算することです。幸運にも、ここにシンプルかつ信頼性の高い方法があります。


(blenkernel/intern/object.c の where_is_object()より)
/* set negative scale flag in object */ 
Crossf(vec, ob->obmat[0], ob->obmat[1]);
if( Inpf(vec, ob->obmat[2]) < 0.0 ) ob->transflag |= OB_NEG_SCALE;
else ob->transflag &= ~OB_NEG_SCALE;
これは単に変換行列の最初の二行の外積をとり、これを三行めと比べる(内積をとる)だけです。

描画中の前面・背面の決定を正しくしました。
if(ob->transflag & OB_NEG_SCALE) glFrontFace(GL_CW);
else glFrontFace(GL_CCW);
三つめの画像では4つのシチュエーションすべてにおいて正しいdouble-sideのライティングが行われています。

かなりの年月の後に、ついに…。
 
評価された記事: 0.00 (0 件の投票)
このファイルの評価
カテゴリに戻る | カテゴリの一覧に戻る
ログイン
ユーザID または e-mail:

パスワード:



パスワード紛失
新着リンク
関連文書の新着

各コンテンツは特に記述がない限り、投稿者に著作権があります。投稿者の記載されていないものは管理者により作成。 
(C)2004-2010 blender.jp All Rights Reserved.  
Designed by yamyam. inspired from OCEAN-NET  
Special Thanks to kyk.:) Powered by XOOPS