HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0823
ふぃge3d 平行光源について7解決


ふぃg

リンク

2010/8/23(Mon) 23:43:19|NO.34596

今easy3dでゲームを作ろうと思って
いろいろと苦悩しながらやっていたのですが
ライトを使うときに平行光源というのがうまくいきません
なんというか全体的に光が当たる予想をしているんですが
1面だけが光を受けて光っているような状態で
これが平行光源なんですか?
スクリプトに問題らしきとこは私的には見つけられませんでした

一応ssもあります
http://www21.atpages.jp/ookenn1996/hsp3%202010-08-23%2023-33-18-336.jpg
わかりやすいように今回は光源は赤です
動かすことはできませんが一応スクリプトを載せておきます


//3Dモデルを表示するだけのサンプルです。(最小構成) #include "e3dhsp3.as" dim keybuf, 256 ;file のpath 用のバッファーの作成 pathlen = 2048 sdim mediadir, pathlen sdim pathbuf, pathlen, 2 screenw = 640 : screenh = 480 screen 0, screenw, screenh, 1 title "Easy3D for HSP3 sample" ;初期化 E3DEnableDbgFile E3DInit 0, -1, 0, 16, 0, scid1 ;カメラの初期化 camposx = 0.0 : camposy = 200.0 : camposz = -2500.0 E3DSetCameraPos camposx, camposy, camposz camdegxz = 180.0 : camdegy = -0.0 E3DSetCameraDeg camdegxz, camdegy ;projectionの変更をしたいときは、以下の2行を有効にしてください。 proj_near = 100.0 : proj_far = 30000.0 : proj_fov = 60.0 E3DSetProjection proj_near, proj_far, proj_fov //データ読み込み pathbuf=dir_cur + "\\g.sig" E3DSigLoad pathbuf,hsid1 E3DSetPos hsid1, 0.0, 0.0, 0.0 //ライトの作成 lightdirx1 = 0.0 lightdiry1 = 0.0 lightdirz1 = 1.0 lightr1 = 255 lightg1 = 0 lightb1 = 0 E3DCreateLight lid1 E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1,lightr1, lightg1, lightb1 chkfps1 = 0 *main ; keybuf変数は、メインループの外で、dim keybuf, 256 として、確保しておいてください。 E3DGetKeyboardState keybuf if keybuf.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了 E3DBeginScene scid1 E3DChkInView scid1, hsid1 ;不透明部分の描画をする E3DRender scid1, hsid1, 0, 0, 0 E3DEndScene E3DPresent scid1 await 20 goto *main



この記事に返信する


ORZ

リンク

2010/8/24(Tue) 00:19:51|NO.34597

スクリーンショットがふぉびどぅんなのでちゃんと見れるか確認してくれ。

それはさておき、仕様だと言えば解決すると思う。
平行光源てのは平たく言えば太陽光のようなもので、位置関係に関係なく万物を等しく照らしてくださる。
明日の朝外に出てさいころを手に乗せてみたら、必ずどこか暗い面があるだろう。

親切にWikipediaの記事があったからリンクはっちゃう。
http://ja.wikipedia.org/wiki/3次元コンピュータグラフィックス



ふぃg

リンク

2010/8/24(Tue) 00:36:29|NO.34598

>平行光源てのは平たく言えば太陽光のようなもので、位置関係に関係なく万物を等しく照らしてくださる。
>明日の朝外に出てさいころを手に乗せてみたら、必ずどこか暗い面があるだろう。
なるほど、とても理解のしやすいたとえですね
でもやはりそう考えてみるとおかしいです
もういっかいURLはっつけてみます
今回はインデックスの こちら 殻とんでいただくようになっています
http://www21.atpages.jp/ookenn1996/



ORZ

リンク

2010/8/24(Tue) 03:00:48|NO.34599

つまり壁を全部明るくしたいという前提でいくと
Easy3Dでやる場合に簡単なのは、メタセコで自己照明という項目をつけるか
メタセコまたはRokDeBone2またはE3D上でEmissive光等をいじくって全部明るくしてしまうという方法がある。



ふぃg

リンク

2010/8/24(Tue) 09:08:19|NO.34600

ということは
これはもうどうしようもないっていうことになるんですか?



ORZ

リンク

2010/8/24(Tue) 12:12:06|NO.34601

>なるほど、とても理解のしやすいたとえですね
などと適当なことを書きやがりつつ何も理解できていないな。今すぐ筆箱から消しゴムを取り出して
学校のグラウンドで持て。影ができるだろ。並行光源で万物すべての面を照らすことはできないはずだ。
スクリプトでライトのベクトルをそのように設定してるんだからそうなる罠。

さらにお手軽な解決方法まで書いたのに
>これはもうどうしようもないっていうことになるんですか?
とまで言われる始末。俺なんかしたか?



おちゃっこ

リンク

2010/8/24(Tue) 12:15:24|NO.34602

SSを見ましたが不具合ではありません
CGの世界と現実の世界とではちょっと違います。
CGの世界では光の向き(の反転ベクトル)と面の法線の向きが90度以上になると
光の効果は無くなり、アンビエントの色が表示されます。

提示されているサンプルでは光の向きが(0, 0, 1)になっています。
これを(1, -1, 1)などにしてみるとまた見栄えがぜんぜん違ってきます。

またEasy3Dでは光源は3つまで使えるので
異なる向きの光源を複数使うと希望の画面が得られるかもしれません。



ふぃg

リンク

2010/8/24(Tue) 13:55:07|NO.34607

>とまで言われる始末。俺なんかしたか?
いいえ、私が理解し違えていたせいで
てっきり平行光源といのはポイントライトのように思ってしまっていました
本当に申し訳ありません、教えていただいたサイトが最初は3の説明で何がなんだかわからなかったんですが
これも私の早とちり最後までひとつながりなのに気づきそのサイトにいってみたところ
今ではきちんと理解しました。
何度も何度もありがとうございました
>提示されているサンプルでは光の向きが(0, 0, 1)になっています。
>これを(1, -1, 1)などにしてみるとまた見栄えがぜんぜん違ってきます。
ベクトルをきちんと理解しきれていなかったようです
確かにいろいろ変えてみると、見え方が変わりました
ありがとうございました



ONION software Copyright 1997-2021(c) All rights reserved.