問題タブ [scenekit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - SceneKitのカスタムアニメート可能なプロパティ
Core Animationでカスタムのアニメーション化可能なプロパティを作成できることは知っていますが、OS X 10.8のSceneKitフレームワークではどうでしょうか? プロパティをアニメート可能にするために行うSCNAnimatable
のと同じAPIを公開していないようです。CALayer
私のアプリケーションには、というSCNNode
サブクラスがStarfield
あります。これは、古いOpenGLアプリケーションから。を使用して移植したものSCNNodeRendererDelegate
です。GLfloat
スターフィールドは、次のプロパティを公開しますwarpFactor
。
しかし、アニメーションを追加しようとすると、次のようになります。
コンソールに次のように表示されます。
SceneKitが真新しいことは知っていますが、これを機能させる方法を知っている人はいますか?
macos - シーン キット アニメーション
この単純なアニメーションを機能させることができない理由を知っている人はいますか? 再生されないだけです。
問題は...
乾杯
scenekit - Scene Kit オーバーライド SCNNode レンダリング
とても使いやすそうなScene Kitをチェックしてみました。SCNNode のレンダリングをオーバーライドする方法がありますが、これは問題ありません。問題は、デフォルトのレンダリングの隣に追加の要素をレンダリングしたいということです。SCNNodeRendererDelegate でレンダリングをオーバーライドすると、たとえば、それに接続されているジオメトリがレンダリングされなくなります。ジオメトリのワイヤフレーム、バウンディング ボックス、または 2dtext を上にレンダリングしたいとします。助言がありますか?
macos - SceneKit アニメーションの一時停止
ユーザーが SceneView をクリックしてアニメーションを一時停止できるテスト アプリを作成しようとしています。SceneView は、3d アプリ (Cinema 4D) で作成された .dae ファイルからアニメーションを読み込みます。アプリは、起動時にアニメーションを正常に再生およびループします。
アニメーションを一時停止するには、Technical Q&A QA1673を参考にしました。この .dae ファイルの場合、アニメーションは実際にはアニメーションの階層として入ってくるので、基礎となる CAKeyframeAnimation のそれぞれに到達して、その速度をゼロに設定しようとしました。私のコードは現在次のようになっています。
ブレークポイントを設定すると、キーフレーム アニメーションの速度が 1 から 0 に変化することがわかりますが、アニメーションはシーン ビューで通常の速度で再生され続けます。私はもともと最上位の CAAnimationGroup の速度をゼロに設定しようとしましたが、これも効果がありませんでした。進行中のアニメーションを一時停止する正しい方法は何ですか?
macos - SceneKit でテクスチャのファイル名を取得する方法
MacOS で SceneKit を使用して Collada ファイルをロードし、シーン ノード プロパティを取得して、独自のシーン グラフで使用したいと考えています。
頂点、法線、変換マトリックス、マテリアル プロパティなど (テクスチャ ファイル名を除くすべて) に簡単にアクセスできます。
テクスチャのファイル名が SCNMaterialProperty クラスのインスタンスに格納されることを期待します。ドキュメントから:
SCNMaterialProperty クラスは、テクスチャと、テクスチャをオブジェクトに適用する方法を指定する一連の属性をカプセル化します。
しかし、ソース ファイル名自体ではなく、テクスチャを表す NSImage しか取得できません。
どこかにあるはずです - XCode の collada ビューアーのインスペクターには、ファイル名も表示されます (SCNMaterialProperty のプロパティと共に):
SceneKit オブジェクト グラフでテクスチャのファイル名にアクセスするにはどうすればよいですか?
macos - SceneKit スムーズなカメラの動き
SceneKit (OpenGL) 内でカメラをスムーズに動かすための標準的な方法は何ですか? 手動で x、y を変更してもスムーズではありませんが、CoreAnimation を使用すると「パルス状」の動きが作成されます。SceneKit のドキュメントは非常に限られているように見えるので、例を挙げていただければ幸いです。私は現在これを行っています:
cocoa - SCNRendererのPointOfViewの変更
特定の視点を持つシーンからSCNRendererを作成しています。SCNViewを使用して自分の視点を表示し、オブジェクトシーンが必要なように見えたら、オフラインのopenGLContextでレンダリングして、そこから画像を作成します。これは関連するコードです。
視点のクローンを作成すると、レンダラーがSCNViewとまったく同じ方法でシーンをレンダリングすることがわかりました。これまでのところ完璧です。
今、私は視点を微調整したいと思います。たとえば、回転をシーンビューに依存しないもの、たとえば0に設定したいので、次のようにします。
呼び出す前に[lRenderer render]
、これは物事を変更しません。
lRenderer.pointOfViewで変更したプロパティは重要ではないようです。しかし、lRenderer.pointOfView = [self.sceneView.pointOfView clone]
レンダラーがself.sceneViewの視点ではなくデフォルトの視点からレンダリングする行を省略した場合、複製されたSCNNodeに、lRenderer.pointOfViewで変更できる何かが必要になりますか?
objective-c - SceneKit on OS X with thousands of objects
I'm following this tutorial: http://blog.bignerdranch.com/754-scenekit-in-mountain-lion/
I'm interested in using Scene Kit, but my scenes might potentially have thousands of spheres. To stress-test Scene Kit I tried this:
This works fine for, say, 1000 spheres (10^3) but fails (perhaps unsurprisingly) for 1,000,000 spheres (100^3). I don't mind not being able to use a million spheres, but I'd like to work out what the sensible upper bound is (5,000? 15,000?) and how to increase it.
What can I do to mitigate this? e.g. I've tried sphere.segmentCount = 3 and while that speeds up rendering, it doesn't have much effect on memory usage, which I suspect is the limiting factor.
Also, there doesn't seem to be a SCNPoint class. I was thinking about switching to just displaying a point when the number of spheres is too high, but I can't see from the SceneKit documentation how to display a simple point -- the simplest I can see is a triangle.
Any help is much appreciated.
Edit: @toyos suggested that the SCNSphere objects are merged into single SCNGeometry object (provided they don't need to be independently animated, which they don't), but I can't find an easy way to do this.
SCNGeometry is created by using [SCNGeometry geometryWithSources:(* NSArray)sources geometryWithElements:(* NSArray) elements]
as documented here, but I'm not clear as to how to create an SCNGeometry
object from my spheres.
e.g. for a single sphere, I could see using sphere.geometryElementCount
to get the number of elements and then using that to populate an array using [sphere geometryElementAtIndex:(NSInteger)elementIndex]
which would give me the elements, but I'm not sure how to get the "sources" (or what they even are). The method to get the geometry sources is [sphere geometrySourcesForSemantic:(NSString*) semantic]
, but what is this semantic string? (is it meant to be "normals" or "vertices" or is this something else? the documentation quite helpfully says the semantic is "The semantic value of the geometry source." without saying what possible values of the semantic are)
That's just for a single sphere, which would be fairly pointless (since SCNSphere
is just a subclass of SCNGeometry
anyway), so now I have to add multiple spheres. So would I have to manually translate the vertices of the sphere when adding them to my SCNGeometry
object?
I'm just trying to figure out the most sensible way to do this.
objective-c - プロトコルに準拠するすべてのクラスにカテゴリを実装する
SCNRendererに、いくつかのカメラユーティリティメソッドを追加するカテゴリを作成しました。これらの同じメソッドは、SCNViewとSCNLayerにも同様に役立ちます。このカテゴリが関連する3つのクラスはすべて、SCNSceneRendererに準拠しています。特定のクラスではなく、特定のプロトコルに準拠するすべてのクラスに適用されるカテゴリを作成することは可能ですか?
cocoa - Scene Kit のピボット マトリックスのセマンティクスは何ですか?
ノードの変換関連プロパティのシーン キットの使用のセマンティクスの理解に取り組んでいます。特に、ノードのピボット プロパティは単一のポイントではなく、完全な変換マトリックスであり、Collada の仕様やその他のドキュメントで同等のものへの参照が見つかりませんでした。
シーン キットのピボット マトリックス、または同様のセマンティクスを持つプロパティを使用した経験のある人はいますか? 誰かが簡単な説明/これがどのように使用されるかのサンプル、または関連ドキュメントへのポインタを提供できますか? これは潜在的に有用なアプローチのように見えますが、回避できるのであれば、リバース エンジニアリングを行う必要はありません。
編集: OMZ の回答に基づくと、ピボットは変換ツリーの別のレイヤーにすぎないように思われます。しかし、もしそうなら、単に中間ノードを追加するのとどう違うのでしょうか? どの変換をどこに適用するかを決定するための根拠は何でしょうか?