parse

package
v0.0.0-...-6f84953 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2019 License: GPL-3.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Parse

type Parse interface {
	LoadFromFile(filename string) (err error)
	LoadFromStream(stream *catparser.DataViewEx) (err error)
}

Parse 解析接口

type ParsePmd

type ParsePmd struct {
	Metadata struct {
		Format           string `!:Continue`
		CoordinateSystem string `!:Continue`
		//! 模型信息
		Magic          string `Str:3`
		Version        float32
		Name           string `StrSjis:20`
		Comment        string `StrSjis:256`
		EnglishName    string `!:Continue`
		EnglishComment string `!:Continue`
		//! 解析过程变量
		VertexCount          uint32 `!:$;!:Continue`
		FaceCount            uint32 `!:$;!:Continue`
		MaterialCount        uint32 `!:$;!:Continue`
		BoneCount            uint16 `!:$;!:Continue`
		IkCount              uint16 `!:$;!:Continue`
		MorphCount           uint16 `!:$;!:Continue`
		MorphFrameCount      uint8  `!:$;!:Continue`
		BoneFrameNameCount   uint8  `!:$;!:Continue`
		BoneFrameCount       uint32 `!:$;!:Continue`
		EnglishCompatibility bool   `!:$;!:Continue`
		RigidBodyCount       uint32 `!:$;!:Continue`
		ConstraintCount      uint32 `!:$;!:Continue`
	}
	//! 模型数据
	Vertices       []PmdVertices  `len$:VertexCount`
	Faces          []uint16       `len$:FaceCount`
	Materials      []PmdMaterials `len$:MaterialCount`
	Bones          []PmdBone      `len$:BoneCount`
	Iks            []PmdIks       `len$:IkCount`
	Morphs         []PmdMorphs    `len$:MorphCount`
	MorphFrames    []uint16       `len$:MorphFrameCount`
	BoneFrameNames []struct {
		Name        string `StrSjis:50`
		NameEnglish string `!:Continue`
	} `len$:BoneFrameNameCount`
	BoneFrames []PmdBoneFrame `len$:BoneFrameCount`

	ToonTexture [10]struct {
		FileName string `StrSjis:100`
	}
	RigidBodies []PmdRigidBody  `len$:RigidBodyCount`
	Constraints []PmdConstraint `len$:ConstraintCount`
	// contains filtered or unexported fields
}

/ Pmd模型解析

解析MMD模型

? 日志 * 2019年9月21日 完成 / ParsePmd 解析pmd格式模型

func (*ParsePmd) LoadFromFile

func (model *ParsePmd) LoadFromFile(filename string) (err error)

LoadFromFile 加载从文件

func (*ParsePmd) LoadFromStream

func (model *ParsePmd) LoadFromStream(dv *catparser.DataViewEx) (err error)

LoadFromStream 从文件对象加载

type ParsePmx

type ParsePmx struct {
	Metadata struct {
		Format           string `!:Continue`
		CoordinateSystem string `!:Continue`
		Magic            string `Str:4`
		Version          float32
		HeaderSize       uint8  `!:$`
		VertexCount      uint32 `!:$;!:Continue`
		Facecount        uint32 `!:$;!:Continue`
		TextureCount     uint32 `!:$;!:Continue`
		MaterialCount    uint32 `!:$;!:Continue`
	}
	// 文件设定
	Setting struct {
		Encoding           uint8 `!:$`
		Uv                 uint8 `!:$`
		VertexIndexSize    uint8 `!:$`
		TextureIndexSize   uint8 `!:$`
		MaterialIndexSize  uint8 `!:$`
		BoneIndexSize      uint8 `!:$`
		MorphIndexSize     uint8 `!:$`
		RigidbodyIndexSize uint8 `!:$`
		// contains filtered or unexported fields
	} `if:"int:HeaderSize>=8";!:Continue`
	ModelName           string `@:ReadString;!:Continue`
	ModelEnglishName    string `@:ReadString;!:Continue`
	ModelComment        string `@:ReadString;!:Continue`
	ModelEnglishComment string `@:ReadString;!:Continue`
	Vertices            []struct {
		Position [3]float32
		Normal   [3]float32
		Uv       [2]float32
		UvA      []struct {
			UV [4]float32
		} `len:Uv`
		SkinningType uint8 `!:$`
		Skinning     struct {
			BDEF1 struct {
				BoneIndex int32 `ReadIndex:BoneIndexSize;!:Continue`
			} `if:"int:SkinningType==0";!:Continue`
			BDEF2 struct {
				BoneIndex1 int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex2 int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneWeight float32
			} `if:"int:SkinningType==1";!:Continue`
			BDEF4 struct {
				BoneIndex1  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex2  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex3  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex4  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneWeight1 float32
				BoneWeight2 float32
				BoneWeight3 float32
				BoneWeight4 float32
			} `if:"int:SkinningType==2";!:Continue`
			SDEF struct {
				BoneIndex1 int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex2 int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneWeight float32
				UdefC      [3]float32
				UdefR0     [3]float32
				UdefR1     [3]float32
			} `if:"int:SkinningType==3";!:Continue`
			QDEF struct {
				BoneIndex1  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex2  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex3  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneIndex4  int32 `ReadIndex:BoneIndexSize;!:Continue`
				BoneWeight1 float32
				BoneWeight2 float32
				BoneWeight3 float32
				BoneWeight4 float32
			} `if:"int:SkinningType==4";!:Continue`
			EdgeRatio float32
		}
	} `len$:VertexCount`
	Faces     []int16       `len$:Facecount;for:"ReadIndex:VertexIndexSize";!:Continue`
	Textures  []string      `len$:TextureCount;for:"@:ReadString";!:Continue`
	Materials []PmxMaterial `len$:MaterialCount;@:ParseMaterial;!:Continue`
}

ParsePmx 解析Pmx格式模型

func (*ParsePmx) LoadFromFile

func (model *ParsePmx) LoadFromFile(filename string) (err error)

LoadFromFile 加载从文件

func (*ParsePmx) LoadFromStream

func (model *ParsePmx) LoadFromStream(dv *catparser.DataViewEx) (err error)

LoadFromStream 从文件对象加载

type PmdBone

type PmdBone struct {
	Name        string `StrSjis:20`
	NameEnglish string `!:Continue`
	ParentIndex int16
	TailIndex   int16
	Type        uint8
	IkIndex     int16
	Position    [3]float32
}

PmdBone 骨骼信息

type PmdBoneFrame

type PmdBoneFrame struct {
	BoneIndex  int16
	FrameIndex uint8
}

PmdBoneFrame 骨架信息

type PmdConstraint

type PmdConstraint struct {
	Name                   string `StrSjis:20`
	RigidBodyIndex1        uint32
	RigidBodyIndex2        uint32
	Position               [3]float32
	Rotation               [3]float32
	TranslationLimitation1 [3]float32
	TranslationLimitation2 [3]float32
	RotationLimitation1    [3]float32
	RotationLimitation2    [3]float32
	SpringPosition         [3]float32
	SpringRotation         [3]float32
}

PmdConstraint 限制信息

type PmdIks

type PmdIks struct {
	Target    uint16
	Effector  uint16
	LinkCount uint8 `!:$`
	Iteration uint16
	MaxAngle  float32
	Links     []uint16 `len:LinkCount`
}

PmdIks 反向运动学信息

type PmdMaterials

type PmdMaterials struct {
	Diffuse   [4]float32
	Shininess float32
	Specular  [3]float32
	Ambient   [3]float32
	ToonIndex int8
	EdgeFlag  uint8
	FaceCount uint32
	FileName  string `StrSjis:20`
}

PmdMaterials 材质信息

type PmdMorphs

type PmdMorphs struct {
	Name         string `StrSjis:20`
	NameEnglish  string `!:Continue`
	ElementCount int32  `!:$`
	Type         uint8
	Elements     []PmdMorphsElements `len:ElementCount`
}

PmdMorphs 表面信息

type PmdMorphsElements

type PmdMorphsElements struct {
	Index    int32
	Position [3]float32
}

PmdMorphsElements 表面信息

type PmdRigidBody

type PmdRigidBody struct {
	Name            string `StrSjis:20`
	BoneIndex       int16
	GroupIndex      uint8
	GroupTarget     uint16
	ShapeType       uint8
	Width           float32
	Height          float32
	Depth           float32
	Position        [3]float32
	Rotation        [3]float32
	Weight          float32
	PositionDamping float32
	RotationDamping float32
	Restitution     float32
	Friction        float32
	Type            uint8
}

PmdRigidBody 包围盒信息

type PmdVertices

type PmdVertices struct {
	Position    [3]float32
	Normal      [3]float32
	Uv          [2]float32
	SkinIndices [2]int16
	SkinWeights uint8
	EdgeFlag    uint8
}

PmdVertices 顶点信息

type PmxMaterial

type PmxMaterial struct {
	Name            string     //? モデル名
	EnglishName     string     //? モデル英名
	Diffuse         [4]float32 //? 減衰色
	Specular        [3]float32 //? 光沢色
	Shininess       float32    //? 光沢度
	Ambient         [3]float32 //? 環境色
	Flag            uint8      //? 描画フラグ
	EdgeColor       [4]float32 //? エッジ色
	EdgeSize        float32    //? エッジサイズ
	TextureIndex    int32      //? アルベドテクスチャインデックス
	EnvTextureIndex int32      //? スフィアテクスチャインデックス
	EnvFlag         uint8      //? スフィアテクスチャ演算モード
	ToonFlag        uint8      //? 共有トゥーンフラグ
	ToonIndex       int32      //? トゥーンテクスチャインデックス
	Comment         string     //? メモ
	FaceCount       int32      //? 頂点インデックス数
}

PmxMaterial 材质信息

type VertexGrouping

type VertexGrouping struct {
	ID catgl.PortID
	//* 索引
	EBO         uint32
	Size        int32
	DisplayMode uint32
	//? 纹理
	TextureUnit []catgl.TextureShader
	//? 物体颜色
	VfModelColor mgl32.Vec3
}

VertexGrouping 缓冲索引

func (*VertexGrouping) AddTexture

func (V *VertexGrouping) AddTexture(texture [2]uint32, unit uint32)

AddTexture 添加纹理

func (*VertexGrouping) Update

func (V *VertexGrouping) Update(Program uint32)

Update 更新

type VertexIndex

type VertexIndex struct {
	catgl.Vertex //? 继承默认顶点处理
	Index        []uint32
	Texture      map[string][2]uint32
	Grouping     map[catgl.PortID]*VertexGrouping
	//? 灯光信息
	VflightPos   mgl32.Vec3
	VfLightColor mgl32.Vec3
	//? 物体颜色
	VfModelColor mgl32.Vec3
}

VertexIndex 默认顶点

func (*VertexIndex) SetGrouping

func (V *VertexIndex) SetGrouping(start, size int) *VertexGrouping

SetGrouping 设置块

func (*VertexIndex) SetIndex

func (V *VertexIndex) SetIndex(Index []uint32)

SetIndex 设置索引

func (*VertexIndex) SetTexture

func (V *VertexIndex) SetTexture(file string, Target uint32) ([2]uint32, error)

SetTexture 设置材质 * file 材质文件名 * Target 纹理类型

func (*VertexIndex) Update

func (V *VertexIndex) Update(Program uint32)

Update 更新

Directories

Path Synopsis
test
pmd
pmx

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL